poj1504--求两个数的反转数的和的反转数

题意:给定4321 5678,结果再反转(1234+8756)

一开始以为是poj1503一样,就稀里糊涂的敲代码,实际上有不同

如题:先求1234

    + 8765

----------------------

这样就相似poj1503

4 3 2 1
5 6 7 8

不过在str串与fin相加时,就按给定的顺序加就行

for(i=0,j=0;i<=len-1;i++,j++)
总结:得到的结果还要反转,假设不反转应该是从右往左输出,结果是忽略前导0(从左往右)输出

分别找出都不为0的下标

int left=0,right=103;
        while(1)
        {
            if(fin[right]==0)
                right--;
            else
                break;
        }
        while(1)
        {
            if(fin[left]==0)
                left++;
            else
                break;
        }

最后输出

技巧:输入格式1234 4567

只用一个串,重复用两次就行,scanf遇到空格结束,相当于第一次进while(t)循环,就只读到了一个数串

#include <stdio.h>
#include <stdlib.h>
#include<string.h>
int main()
{
    int n,i,j,len,temp;
    char str[100];
    int fin[104];
    scanf("%d",&n);
    while(n--)
    {
        memset(fin,0,sizeof(fin));
        int t=2;
        while(t--){
        scanf("%s",str);
        len=strlen(str);
        temp=0;
        for(i=0,j=0;i<=len-1;i++,j++)
        {
            int c;
            c=fin[j]+temp+str[i]-'0';
            fin[j]=c%10;
            temp=c/10;
        }
        while(temp>0)
        {
            int c;
            c=temp+fin[j];
            fin[j]=c%10;
            temp=c/10;
            j++;
        }
        }
        int left=0,right=103;
        while(1)
        {
            if(fin[right]==0)
                right--;
            else
                break;
        }
        while(1)
        {
            if(fin[left]==0)
                left++;
            else
                break;
        }
        for(i=left;i<=right;i++)
        {
            printf("%d",fin[i]);
        }
        printf("
");
    }
    return 0;
}

  

原文地址:https://www.cnblogs.com/gabygoole/p/4480834.html