필기시험 문제: N의 곱셈을 계산한다
-
- public class test
- {
- // ,
- private static String multipy(String num1, String num2)
- {//
- String result = "0";
- int i,j,n1,n2;
- int len1 = num1.length();
- int len2 = num2.length();
- if (len1 < len2)
- {
- for (i = len1 -1; i >=0; --i)
- {
- n1 = num1.charAt(i) - '0';
- String sum = "0";
- for (j = 0; j < n1; ++j)
- {
- sum = add(sum,num2);
- }
- StringBuilder tmpSB = new StringBuilder(sum);
- for (j = i; j < len1 -1; ++j)
- {
- tmpSB.append("0");
- }
- result = add(result,tmpSB.toString());
- }
- }
- else
- {
- for (i = len2 -1; i >=0; --i)
- {
- n2 = num2.charAt(i) - '0';
- String sum = "0";
- for (j = 0; j < n2; ++j)
- {
- sum = add(sum,num1);
- }
- StringBuilder tmpSB = new StringBuilder(sum);
- for (j = i; j < len2 -1; ++j)
- {
- tmpSB.append("0");
- }
- result = add(result,tmpSB.toString());
- }
- }
-
- return result;
- }
- private static String add(String num1, String num2)
- {//
- String result = "";
- int len1 = num1.length();
- int len2 = num2.length();
- int nAddOn = 0;//
- int i,j,n1,n2,sum;
- StringBuilder sb = new StringBuilder();
- for (i = len1 - 1,j = len2 - 1 ; i >= 0 && j >= 0; --i,--j)
- {
- n1 = num1.charAt(i) - '0';
- n2 = num2.charAt(j) - '0';
- sum = n1 + n2 + nAddOn;
-
- if (sum >= 10)
- {
- nAddOn = 1;
- }
- else
- {
- nAddOn = 0;
- }
- sb.append(sum % 10);
- }
- if (len1 > len2)
- {//
- for (; i >= 0; --i)
- {
- n1 = num1.charAt(i) - '0';
- sum = n1 + nAddOn;
- if (sum >= 10)
- {
- nAddOn = 1;
- }
- else
- {
- nAddOn = 0;
- }
- sb.append(sum % 10);
- }
- }
- else if (len2 > len1)
- {//
- for (; j >= 0; --j)
- {
- n2 = num2.charAt(j) - '0';
- sum = n2 + nAddOn;
- if (sum >= 10)
- {
- nAddOn = 1;
- }
- else
- {
- nAddOn = 0;
- }
- sb.append(sum % 10);
- }
- }
-
- if (nAddOn > 0)
- {
- sb.append(nAddOn);
- }
-
- sb.reverse();
- result = sb.toString();
- return result;
- }
- private static String factorial(int n)
- {
- String result = "1";
- for (int i = n; i >= 2; --i)
- {
- result = multipy(result,String.valueOf(i));
- }
- return result;
- }
- public static void main(String[] args) throws Exception
- {
- // 100 !
- System.out.println(factorial(100));
- }
-
- }
c++ 버전으로 비교해 볼게요.
- // ,
-
- #include <iostream>
- #include <vector>
- #include <algorithm>
- using namespace std;
-
- string add(string num1, string num2)
- {//
- string result = "";
- int len1 = num1.length();
- int len2 = num2.length();
- int nAddOn = 0;//
- int i,j,n1,n2,sum;
- vector<char> tmpSum;
-
- for (i = len1 - 1,j = len2 - 1 ; i >= 0 && j >= 0; --i,--j)
- {
- n1 = num1[i] - '0';
- n2 = num2[j] - '0';
- sum = n1 + n2 + nAddOn;
-
- if (sum >= 10)
- {
- nAddOn = 1;
- }
- else
- {
- nAddOn = 0;
- }
- tmpSum.push_back(sum % 10 + '0');
- }
- if (len1 > len2)
- {//
- for (; i >= 0; --i)
- {
- n1 = num1[i] - '0';
- sum = n1 + nAddOn;
- if (sum >= 10)
- {
- nAddOn = 1;
- }
- else
- {
- nAddOn = 0;
- }
- tmpSum.push_back(sum % 10 + '0');
- }
- }
- else if (len2 > len1)
- {//
- for (; j >= 0; --j)
- {
- n2 = num2[j] - '0';
- sum = n2 + nAddOn;
- if (sum >= 10)
- {
- nAddOn = 1;
- }
- else
- {
- nAddOn = 0;
- }
- tmpSum.push_back(sum % 10 + '0');
- }
- }
-
- if (nAddOn > 0)
- {
- tmpSum.push_back(nAddOn + '0');
- }
- reverse(tmpSum.begin(),tmpSum.end());
- copy(tmpSum.begin(),tmpSum.end(),back_inserter(result));
- return result;
- }
-
- string multipy(string num1, string num2)
- {//
- string result = "0";
- int i,j,n1,n2;
- int len1 = num1.length();
- int len2 = num2.length();
- if (len1 < len2)
- {
- for (i = len1 -1; i >=0; --i)
- {
- n1 = num1[i] - '0';
- string sum = "0";
- for (j = 0; j < n1; ++j)
- {
- sum = add(sum,num2);
- }
-
- string tmpSB(sum);
- for (j = i; j < len1 -1; ++j)
- {
- tmpSB.append("0");
- }
- result = add(result,tmpSB);
- }
- }
- else
- {
- for (i = len2 -1; i >=0; --i)
- {
- n2 = num2[i] - '0';
- string sum = "0";
- for (j = 0; j < n2; ++j)
- {
- sum = add(sum,num1);
- }
- string tmpSB(sum);
- for (j = i; j < len2 -1; ++j)
- {
- tmpSB.append("0");
- }
- result = add(result,tmpSB);
- }
- }
-
- return result;
- }
-
-
- string factorial(int n)
- {
- string result = "1";
- char buff[100];
- for (int i = n; i >= 2; --i)
- {
- result = multipy(result,_itoa(i, buff,10));
- }
- return result;
- }
-
- int main()
- {
- int N;
- while (cin >> N)
- {
- cout << factorial(N).c_str() << endl;
- }
- return 0;
- }
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
테이블의 행을 두 번 클릭하여 세부 정보 표시텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.