1. 程式人生 > >大整數問題得求解 大整數的加法 計算2的n次方

大整數問題得求解 大整數的加法 計算2的n次方

#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;
}