标签:ace 无法 sum for else clu lock block 之一
最近参加一个编程比赛,里面有个一些题库,这个题目就是其中之一.
当然,如果想锻炼自己的编程水平,可以去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语言实现)
标签:ace 无法 sum for else clu lock block 之一
原文地址:https://www.cnblogs.com/qiny1012/p/9385443.html