大整數問題得求解 大整數的加法 計算2的n次方
阿新 • • 發佈:2019-02-10
#include<iostream>
#include<cstring>
#define maxn 10000
using namespace std;
int ans[maxn];
int main()
{
char s1[maxn];
char s2[maxn];
cin>>s1>>s2;
int len1 = strlen(s1);
int len2 = strlen(s2);
int ptr = 0;//結果陣列
int carry = 0;//進位
int i,j;
//從最低位開始加
for (i=len1-1,j=len2-1;i>=0||j>=0;i--,j--)//這裡用或者的原因:兩個都得算完才能出去
{
int x = carry;
if(i>=0)//s1如果還有數
{
x+=s1[i]-'0';
}
if(j>=0)//s2如果還有數
{
x+=s2[j]-'0';
}
ans[ptr++]=x%10;
carry = x/10;
}
//如果有最高位進位
if (carry)
ans[ptr++]= carry;
int flag = 1;//處理一下特殊用例 00000+00000
for(i=ptr-1;i>=0;i--)
{
//前導0不能輸出
if(!ans[i]&&flag){
continue;
}
flag = 0;
printf("%d",ans[i]);
}
//全是0的情況
if(flag)
printf("0\n");
return 0;
}
#include<iostream>
using namespace std;
int a[1010];
int main()
{
int n,i;
cin>>n;
int l=1;//指向最高位的後一位
a[0]=2;
for(i=1;i<n;i++)
{
for(int j=0;j<l;j++)
a[j]*=2;
for(int j=0;j<l;j++)
{
a[j+1]+=a[j]/10;
a[j] = a[j]%10;
}
//如果a[l]不等於零 說明進位了,l往後移動
if(a[l]!=0)
l++;
}
for(int j=l-1;j>=0;j--)
{
cout<<a[j];
}
cout<<endl;
return 0;
}
#include<iostream>
#define maxn 40010
using namespace std;
int result[maxn];
int main()
{
int num;
cin>>num;
int index = 1;//最高位的位置
result[0]=1;
for(int i=1;i<=num;i++)
{
int carry=0;
for(int j=0;j<index;j++)
{
int tmp = result[j]*i+carry;//i 1~~~num 很大 相乘得到carry會很大
result[j] = tmp %10;
carry = tmp/10;
}
//為什麼要while處理 i 1~~~num 很大 相乘得到carry會很大,所以要用while處理一下
while(carry)
{
result[index++] = carry%10;
carry/=10;
}
}
for(int i=index-1;i>=0;i--)
cout<<result[i];
cout<<endl;
return 0;
}