给定 2 个正整数 a, b,a 和 b 最多可能有 40 位,求出 a + b 的和(C语言实现)
Posted 风流倜傥的小花生
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了给定 2 个正整数 a, b,a 和 b 最多可能有 40 位,求出 a + b 的和(C语言实现)相关的知识,希望对你有一定的参考价值。
最近参加一个编程比赛,里面有个一些题库,这个题目就是其中之一.
当然,如果想锻炼自己的编程水平,可以去lintcode或者其他的网站上去刷题.
自信满满的我看到花了一个多小时才写出来,实在是汗颜.
本来实现使用string,毕竟是使用c++编程.没想好怎们写,就没有采用.
题目描述:
给定 2 个正整数 a, b,a 和 b 最多可能有 40 位,求出 a + b 的和。
输入描述:
两个正整数 a, b,a 和 b 最多可能有 40 位。一行表示一个数。
输出描述:
a + b 的和。
样例输入:
1111111111111111111111111111111111111111111111111111111111111111111 2222222222222222222222222222222222222222222222222222222222222222222
样例输出:
3333333333333333333333333333333333333333333333333333333333333333333
实现的原理很简单,就是对齐.把字符串的位与位对齐.
把对齐的部分相加,然后在处理没有对齐的部分
#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 ; //数字进行对齐 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-57 sum[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; } }
以上是关于给定 2 个正整数 a, b,a 和 b 最多可能有 40 位,求出 a + b 的和(C语言实现)的主要内容,如果未能解决你的问题,请参考以下文章