杭电OJ 1002 A + B Problem II C语言
简要说一下思路
用两个字符串保存数据。先对齐, 比如1 111 -> 001 111。然后从串尾字符开始,转成int做加法, 同时加上上一位的进位,最后按格式输出。
#include <stdio.h>
#include <string.h>
void HDOJ_1002(){
int n = 0;
scanf("%d", &n);
for (int i = 0; i < n; i++){ //n个case
if (i > 0){ //按题目要求输出black line
printf("\n\n");
}
char num1[1001] = {0}, num2[1001] = {0}, num1_[1001] = {0}, num2_[1001] = {0}, sum[1002] = {0};
scanf("%s %s", num1, num2); //保存原始输入
// 对齐, num1_和num2_保存对齐的输入, sum保存和
int l1 = strlen(num1), l2 = strlen(num2);
int l = 0; //对齐后长度
if (l1 > l2){
int m = l1 - l2;
l = l1;
for (int a = 0; a < m; a++){
num2_[a] = '0';
}
for (int a = m; a < l1; a++){
num2_[a] = num2[a-m];
}
strcpy(num1_, num1);
}
if (l1 < l2){
l = l2;
int m = l2 - l1;
for (int a = 0; a < m; a++){
num1_[a] = '0';
}
for (int a = m; a < l2; a++){
num1_[a] = num1[a-m];
}
strcpy(num2_, num2);
}
if (l1 == l2){
l = l1;
strcpy(num1_, num1);
strcpy(num2_, num2);
}
//从串尾开始做加法
int k = 0; //保存进位
while (--l >= 0) {
int t = num1_[l] - '0' + num2_[l] - '0' + k; //当前位的和 + 进位
if (t > 9){
sum[l] = (t - 10) + '0';
k = 1;
}
else {
sum[l] = t + '0';
k = 0;
}
}
//按题目格式输出
printf("Case %d:\n%s + %s = ", i+1, num1, num2);
if (k == 1){
putchar('1');
}
printf("%s", sum);
}
}
int main() {
HDOJ_1002();
return 0;
}