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("\n");

    }

    return 0;

}

  

 

你可能感兴趣的:(poj)