给定 2 个正整数 a, b,a 和 b 最多可能有 40 位,求出 a + b 的和(C语言实现)
生活随笔
收集整理的這篇文章主要介紹了
给定 2 个正整数 a, b,a 和 b 最多可能有 40 位,求出 a + b 的和(C语言实现)
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
最近參加一個(gè)編程比賽,里面有個(gè)一些題庫,這個(gè)題目就是其中之一.
當(dāng)然,如果想鍛煉自己的編程水平,可以去lintcode或者其他的網(wǎng)站上去刷題.
自信滿滿的我看到花了一個(gè)多小時(shí)才寫出來,實(shí)在是汗顏.
本來實(shí)現(xiàn)使用string,畢竟是使用c++編程.沒想好怎們寫,就沒有采用.
?
?
題目描述:
給定 2 個(gè)正整數(shù) a, b,a 和 b 最多可能有 40 位,求出 a + b 的和。
輸入描述:
兩個(gè)正整數(shù) a, b,a 和 b 最多可能有 40 位。一行表示一個(gè)數(shù)。
輸出描述:
a + b 的和。
樣例輸入:
11111111111111111111111111111111111111111111111111111111111111111112222222222222222222222222222222222222222222222222222222222222222222樣例輸出:
3333333333333333333333333333333333333333333333333333333333333333333?
實(shí)現(xiàn)的原理很簡單,就是對(duì)齊.把字符串的位與位對(duì)齊.
把對(duì)齊的部分相加,然后在處理沒有對(duì)齊的部分
#include <iostream> #include <stdlib.h> #include <string.h> using namespace std; char * addChar(char *add1,char *add2,char *sum,int * carry); int main() { char num[40] = {} ; char num2[40] = {} ;char sum[40] = {} ; cin >> num ;cin >> num2 ;//數(shù)字進(jìn)行對(duì)齊if(strlen(num) == strlen(num2)){int carry = 0;addChar(num,num2,num,&carry);cout << num;return 0;}if(strlen(num) > strlen(num2)) {//num大 int sub = strlen(num)-strlen(num2);int carry = 0;char *p = num + sub;addChar(num2,p,p,&carry);cout << num << endl;}else{int sub = strlen(num2)-strlen(num);int carry = 0;char *p = num2 + sub;addChar(num,p,p,&carry);cout << num2 << endl;} } //相加 char * addChar(char *add1,char *add2,char *sum,int * carry) {if(strlen(add1) == strlen(add2)){for(int i = strlen(add1) - 1;i>=0;i--){//48-57sum[i] = add1[i] + add2[i] - 48 + *carry;if(sum[i] > 57){sum[i] -= 10;*carry = 1;}else{*carry = 0;}}return sum;} else{cout << "erro ,無法相加"<<endl;return NULL; } }
?
轉(zhuǎn)載于:https://www.cnblogs.com/qiny1012/p/9385443.html
總結(jié)
以上是生活随笔為你收集整理的给定 2 个正整数 a, b,a 和 b 最多可能有 40 位,求出 a + b 的和(C语言实现)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 牛客第四次多校Maximum Mode
- 下一篇: 橱窗布置