|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
- /*
- 给定两个字符串形式的非负整数 num1 和num2 ,计算它们的和。
- 注意:
- num1 和num2 的长度都小于 5100.
- num1 和num2 都只包含数字 0-9.
- num1 和num2 都不包含任何前导零。
- 你不能使用任何內建 BigInteger 库, 也不能直接将输入的字符串转换为整数形式。
- */
复制代码
- char * addStrings(char * num1, char * num2)
- {
-
- int len_num1 = strlen(num1);
- int len_num2 = strlen(num2);
- int max_len = len_num1 > len_num2 ? len_num1 : len_num2;
- int min_len = len_num1 > len_num2 ? len_num2 : len_num1;
- char* longerstr = len_num1 > len_num2 ? num1 : num2;
- char* shorterstr = len_num1 > len_num2 ? num2 : num1;
-
- int carry_flag = 0; /* 0 无进位,1有进位*/
- char* pointer2 = NULL;
- int i = 0;
- int temp = 0;
-
-
- carry_flag = 0;
- for(i = max_len-1 ; i >= 0; i--)
- {
- if(max_len - i <= min_len)
- {
- temp = longerstr[i] - 0x30 + shorterstr[i+min_len-max_len] - 0x30 + carry_flag;
- }
- else
- {
- temp = longerstr[i] - 0x30 + carry_flag;
- }
- longerstr[i] = temp % 10 + 0x30;
- if(temp>=10)
- {
- carry_flag = 1;
- }
- else
- {
- carry_flag = 0;
- }
- }
-
- if(carry_flag == 0)
- {
- return longerstr;
- }
- else
- {
- pointer2 = (char*)malloc(sizeof(char)*(max_len+2));
- pointer2[max_len+1] = 0;
-
- pointer2[0] = '1';
- memcpy(&pointer2[1],longerstr,max_len);
-
-
- return pointer2;
- }
- }
复制代码
- int main()
- {
- char a[] = "1";
- char b[] = "1";
- char* c = addStrings(a, b);
- printf("c = %s \n",c);
- }
- /*
- 执行用时 : 4 ms, 在Add Strings的C提交中击败了100.00% 的用户
- 内存消耗 : 7.2 MB, 在Add Strings的C提交中击败了85.94% 的用户
- 315 / 315 个通过测试用例
- 状态:通过
- 执行用时:4 ms
- 提交时间:2 分钟之前
- */
复制代码 |
|