#18188: 給延平同仁(c++AC) 可算出2的1000次方


089487 (089487)

學校 : 國立臺灣師範大學附屬高級中學
編號 : 82069
來源 : [220.130.10.185]
最後登入時間 :
2024-04-01 11:16:18
d238. "<<"運算子真好用 -- Project Euler | From: [1.171.172.13] | 發表日期 : 2019-06-25 19:21

#include<bits/stdc++.h>
using namespace std;
string multiply(string,string);
int main()
{
string a="2",b="2";
for(int i=0;i<999;i++)
{
a=multiply(a,b);
}
int num=0;
for(int i=0;i<a.length();i++) num+=a[i]-'0';
cout<<num<<endl;

//cout<<a<<endl;(a是2^1000的結果
}
string multiply(string a,string b)
{
int n[(a.length()+1)+(b.length()+1)]={0};
int l=(a.length()+1)+(b.length()+1);
int c[a.length()];
int d[b.length()];
for(int i=0;i<a.length();i++) c[i]=a[i]-'0';
for(int i=0;i<b.length();i++) d[i]=b[i]-'0';
for(int i=a.length()-1;i>=0;i--)
{
for(int j=b.length()-1;j>=0;j--)
{
int num=c[i]*d[j];
int digit=(a.length()-i-1)+(b.length()-j-1);
n[l-digit-1]+=num%10;
n[l-digit-2]=num/10;
if(n[l-digit-1]>=10) n[l-digit-1]-=10,n[l-digit-2]++;
}
}
bool f2=false;
string k;
for(int i=0;i<l;i++)
{
if(n[i]!=0||f2) k+=n[i]+'0',f2=true;
if(n[i]==0&&f2==false) continue;
}
return k;

}

 
ZeroJudge Forum