其實大整數的問題都是在像我們打草稿的時候列豎式一樣的,不要告訴我你不知道什麼叫豎式~!其實我開始也不知道它叫這個名字;
所謂豎式,就是你打草稿算算術的方法,小學知識;比如你寫 11+9:
11+ 9
----------
20數a,b,求和,求差;數的長度不超過1000;
貼個**,先輸入乙個數,代表資料的組數n,然後輸入n組a b
#include using namespace std;#define base 4
#define m 10000
char s1[1000],s2[1000];
int a[251],b[251],sum[251];
int max(int a,int b)
void trans(char *str, int *s) //將一串數字字元 轉化為大整數
} i += base;
s[k] = 0;
for(int j = 0; j < i; j++)
if(s[k])
s[0] = k;
else
s[0] = k-1;
} void prin(int *num)
}void copy(int *a,int *b) //b複製給a
int comp(int *a, int *b) //比較大整數大小,a>b返回1,ab[0])return 1;
if(a[0] < b[0])return -1;
for(int i = a[0]; i >= 1 ; i--)
return 0;
} void add(int *a,int *b, int *sum)
if((a[0]==1)&&(a[1]==0))
if (a[0] >= b[0])
else
//轉換為sum + d(即a、b的最大值和最小值);最終結果為sum
sum[sum[0] + 1] = 0; //存放可能出現的進製
for (i = 1; i <= d[0]; i++) //處理位數相同的
}
for (; i <= sum[0]; i++) //處理a、b中大的多出來的位數
else break;
} if (sum[sum[0]+1]>0)sum[0] = sum[0] + 1;
}void sub(int *a, int *b, int *ans)//大整數相減,預設a大於b
ans[i] -= d[i];
} for(; i < ans[0]; i++)
else break;
} if(!ans[ans[0]])
ans[0]--;
} void mult(int *a,int *b,int *ans)
} }//再次求餘進製,
// 2 9999 9999
// 2 9999 9999
//--------------
//step 1: 9999 9999
// 9999
// 0001 0002 9997 進製餘數9999 然後是(9999+9999)*9999,99970002
if(ans[k+1])
k++;
ans[0]=k;
}int main()
{ int t,k = 1;
cin>>t;
while(t--)
{ cin.get();
scanf("%s%s",s1,s2);
trans(s1,a); trans(s2,b);
add(a,b,sum);
printf("case %d:\n",k);
prin(a);
cout<<" + ";
prin(b);
cout<<" = ";
prin(sum);
cout<
大型整數運算 加法, 減法, 乘法
from 用int數模仿真整數的每乙個位,大於10的要進製,負數要借位。include include define max digit 500 大數運算 加法 int multiply int a,int b,int result 大數運算 乘法 int add int a,int b,int r...
c 大整數加法 減法 乘法
大整數加法 大整數減法 大整數乘法 大整數除法 還未寫 大整數的加法 先對資料進行預處理是兩個大整數的位數相等,位數少的那個數在高位補0,使兩數的位數相等,便於計算資料的進製,只需要在函式呼叫的結尾檢查一下最高為是否存在進製的情況,如果需要進製則只需要在最後將進製的數加入到返回值中。加法是對兩個數從...
大整數運算加法
比賽中常常會遇到大整數和高精度的問題,今天先寫乙個大整數的加法運算模板 只支援兩個非負正整數相加 放在這裡,後面會不斷更新。includeusing namespace std const int l 11000 只限兩個非負整數相加 string add string a,string b nb ...