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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

10:大整数加法

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

來源:http://noi.openjudge.cn/ch0106/10/

大整數(shù)加法

總時間限制:

1000ms

內(nèi)存限制:

65536kB

描述

求兩個不超過200位的非負(fù)整數(shù)的和。

輸入

有兩行,每行是一個不超過200位的非負(fù)整數(shù),可能有多余的前導(dǎo)0

輸出

一行,即相加后的結(jié)果。結(jié)果里不能有多余的前導(dǎo)0,即如果結(jié)果是342,那么就不能輸出為0342。

樣例輸入

22222222222222222222 33333333333333333333

樣例輸出

55555555555555555555

分析:該題目雖然題目的字?jǐn)?shù)很少,但是要解決的問題,步驟比較多,對于新手,萌新來說,這道題可能就比較難了。

首先,我們看題,這是一個要求200位以內(nèi),兩個正整數(shù)之和,顯然用int類型的不可能把數(shù)據(jù)進(jìn)行輸入,所以我們可以將輸入的數(shù)據(jù)看做是字符串,利用字符串進(jìn)行輸入,在將字符串裝化為整數(shù)(例如:a[1]=str[1]-'0')。但是題目還有一個條件,?可能有多余的前導(dǎo)0,結(jié)果里不能有多余的前導(dǎo)0。所以我們要想辦法將前導(dǎo)零去掉。我們可以聲明一個i,在遍歷字符串,如果遇到為零的字符則i++,一直遍歷到不為零的字符在break,此時的i就為第一個不為零的位置。

代碼為:

string str;int a[204]; cin>>str; int i;int a_len=0; int n=str.size(); for(i=0;i<n;i++){//遍歷查找不為零的第一個位置。 if(str[i]!='0'){ break; } } for(;i<n;i++){//將字符化為整數(shù)。 a[a_len++]=str[i]-'0'; }

按照以上代碼就可以將前導(dǎo)零去掉,并將字符化為整數(shù)存儲在數(shù)組里面。

接下來,就要做計算操作。首先計算時,先從最低位進(jìn)行計算。但是數(shù)組的第一位為最高位,所以我們要把整數(shù)?先進(jìn)行倒置,在進(jìn)行計算。這里有一個簡便的方法,c++中帶有的reverse件為(algorithm),該函數(shù)可以將數(shù)組進(jìn)行倒置。

?

?最后我們要解決進(jìn)位問題:可以設(shè)立一個數(shù)組x[204],將進(jìn)位進(jìn)行存儲利用。

以下為AC完整代碼:

#include<bits/stdc++.h> using namespace std; int main(){string str;string str1;int a[204]={0};int b[204]={0};int c[204]={0};int x[204]={0};cin>>str;cin>>str1;int i;int a_len=0;int b_len=0;int n=str.size();int m=str1.size(); //將字符轉(zhuǎn)化為數(shù)字,并將前導(dǎo)零去掉。for(i=0;i<n;i++){if(str[i]!='0'){break;}} for(;i<n;i++){a[a_len++]=str[i]-'0'; }for(i=0;i<m;i++){if(str1[i]!='0'){break;}} for(;i<m;i++){b[b_len++]=str1[i]-'0'; }reverse(a,a+a_len);//逆置。reverse(b,b+b_len);int num=max(a_len,b_len);if(a_len==0&&b_len==0){cout<<"0"<<endl;return 0;}for( i=0;i<num;i++){c[i]=a[i]+b[i]+x[i];if(c[i]>9){x[i+1]=1;c[i]-=10;}}if(x[i]==1){c[i]=1;num++;}for(int j=num-1;j>=0;j--){cout<<c[j];}cout<<endl;return 0; }

?

?

?

?

總結(jié)

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

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