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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

超大数的加法

發(fā)布時間:2024/9/3 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 超大数的加法 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

超大數(shù)的加法計算(我的第一篇博客)
Description
求a+b的值 Input 第一行一個整數(shù)T,表示接下來有T行
每行兩個整數(shù)是a,b,(0<=a,b<=10^10000)
Output 輸出值
Sample Input

2 100 10010000000000 10000000000

Sample Output

200 20000000000

/*
現(xiàn)在補一個C++版本的
*/

#include <iostream> #include <stdio.h> #include <string.h> using namespace std; char a[10005],b[10005],c[10005]; int len,def; void inline addZero(int lena,int lenb,char *p) {memset(c,'\0',sizeof(c));len = lena;def = lena - lenb;fill(c,c+def,'0');strcat(c,p);memset(p,'\0',sizeof(p));strcpy(p,c); } int main() {int t;cin>>t;while(t--){memset(a,'\0',sizeof(a));memset(b,'\0',sizeof(b));cin>>a>>b;int lena = strlen(a);int lenb = strlen(b);if(lena!=lenb)lena > lenb?addZero(lena,lenb,b):addZero(lenb,lena,a);elselen = lena;int k = 0,t = 0;memset(c,'\0',sizeof(c));for(int i = len-1; i>=0; i--){int x = (a[i]-'0')+(b[i]-'0')+t;t = x / 10;c[k++] = x%10+'0';}if(t)c[k++] = t+'0';for(int i = k-1; i >= 0; i--)cout<<c[i];cout<<endl;}return 0; }

/*
下面是入門的時候?qū)懙拇a
*/

1
計算超大數(shù)跟我們手算一個道理

#include<stdio.h> #include<string.h> int max2(int m,int n) {return m>n?m:n; }//判斷兩個數(shù)更大的數(shù)函數(shù),減少if的使用 int def(int s,int w) {return s>w?s-w:w-s; }//求差函數(shù) int main() {char a[10005]= {'0'},b[10005]= {'0'};int c[15000]= {0}; //必要的初始化操作int T;scanf("%d",&T);while(T--){int i=0,j=0,k,f,g;int x,y,l,p,q=0;scanf("%s %s",a,b);x=strlen(a),y=strlen(b);l=max2(x,y),f=def(x,y);if(x==y)//如果兩個超大數(shù)位數(shù)相同{for(i=x-1; i>0; i--){p=(a[i]-'0')+(b[i]-'0')+q;c[j]=p%10;q=p/10;//進位j++;} //上面按手算法算到倒數(shù)第二位// 再算最后一位,值直接存到下一個數(shù)組元素格c[j]=(a[0]-'0')+(b[0]-'0')+q;for(k=j; k>=0; k--){printf("%d",c[k]);//逆序輸出出得結(jié)果}}else//兩個超大數(shù)位數(shù)不同{for(i=l-1; i>=f; i--){x=x-1,y=y-1;p=(a[x]-'0')+(b[y]-'0')+q;c[j]=p%10;q=p/10;//進位j++;}//先計算到位數(shù)少的位置for(g=f-1; g>0; g--){if(x>y)//看哪個數(shù)位數(shù)多{p=(a[g]-'0')+q;c[j]=p%10;q=p/10;j++;}else{p=(b[g]-'0')+q;c[j]=p%10;q=p/10;j++;}}//同理按手算法算到倒數(shù)第二位// 再算最后一位,值直接存到下一個數(shù)組元素格if(x>y) c[j]=(a[0]-'0')+q;else c[j]=(b[0]-'0')+q;for(k=j; k>=0; k--){printf("%d",c[k]);}//逆序輸出得結(jié)果}printf("\n");}return 0; }`

總結(jié)

以上是生活随笔為你收集整理的超大数的加法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。