日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

笔试题:计算N的阶乘

發布時間:2023/12/31 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 笔试题:计算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;
}

總結

以上是生活随笔為你收集整理的笔试题:计算N的阶乘的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。