POJ 1504 Adding Reversed Numbers (水题,高精度整数加法)

题意:给两个整数,求这两个数的反向数的和的反向数,和的末尾若为0,反向后则舍去即可。即若1200,反向数为21。题目给出的数据的末尾不会出现0,但是他们的和的末尾可能会出现0。

#include <iostream>
#include <string.h>
#include <stdio.h>
#include <string>
#include <string.h>
using namespace std;
int n1,n2;//n1表示a的位数,n2表示b的位数
int a[100],b[100];
void add() {
    for(int i=0; i<(n1>n2?n1:n2); i++) {
        a[i]=a[i]+b[i];
        if(a[i]>9) {
            a[i]-=10;
            a[i+1]++;
        }
    }
}
int main() {
    int t;
    char s1[100],s2[100];
    scanf("%d",&t);
    while(t--){
        scanf("%s%s",s1,s2);
        memset(a,0,sizeof(a));
        memset(b,0,sizeof(b));
        n1=strlen(s1);
        n2=strlen(s2);
        for(int i=0;i<n1;i++){
            a[i]=s1[i]-'0';
        }
        for(int i=0;i<n2;i++){
            b[i]=s2[i]-'0';
        }
        add();
        //right表示反向数的和的最右端第一个不是0的位置
        int right=0;
        while(1){
            if(a[right]==0)
                right++;
            else
                break;
        }
        int left=n1+n2;
        //left表示反向数的和的最左端第一个不是0的位置
        while(1){
            if(a[left]==0)
                left--;
            else
                break;
        }
        //反向输出
        for(int i=right;i<=left;i++)
            printf("%d",a[i]);
        printf("
");
    }
    return 0;
}
原文地址:https://www.cnblogs.com/chenxiwenruo/p/3327941.html