• hdu1002


    这道题我是没有做出来的,尽管已经做很长时间,但是大致的思路是知道了

    /*分析:对于此题做法有两种:其一,使2字符串的中的字符数字减去'0',逐个相加大于等于10的可以使本位减10,下一位自增1,后面的处理就非常简单了;其二,便是读入字符串后先让各个字符减'0',一一对应存入整形数组中;之后再相加。对于2种方法大致是相同的,都要从后面向前加,逢十进位,以及数组初始化均要初始为0,一边方便运算。
    下面用法一

    摘录(未AC)

    #include<stdio.h>
    #include<string.h>
    int main()
    {
        int n,i,len1,len2,j,k,pi,t,flag;
        char str1[1010],str2[1010];
        scanf("%d",&n);
        for(i=1;i<=n;i++)
        {
            int a[1200]={0};
            flag=0;
           
            scanf("%s%s",str1,str2);//以字符串形式读入
            len1=strlen(str1);
            len2=strlen(str2); 
    printf("Case %d:
    ",i);
            printf("%s + %s = ",str1,str2);
            j=len1-1;
            k=len2-1;
            pi=0;
            while(j>=0&&k>=0)//开始相加
            {
                if(a[pi]+(str1[j]-'0')+(str2[k]-'0')>=10)//相加后大于10的
                {
                    a[pi]=a[pi]+(str1[j]-'0')+(str2[k]-'0')-10;//个位
                    a[pi+1]++;//十位
                }
                else
                    a[pi]=a[pi]+(str1[j]-'0')+(str2[k]-'0');
                pi++;
                k--;
                j--;
            }
            if(j>=0)
            {
                for(t=j;t>=0;t--)
                {
                    a[pi]=a[pi]+(str1[t]-'0');
                    pi++;
                }
            }
            else if(k>=0)
            {
                for(t=k;t>=0;t--)
                {
                    a[pi]=a[pi]+str2[t]-'0';
                    pi++;
                }
            }
            else if(a[pi]!=0)//对于位数相同2个数加后最高位大于10的
                pi++;
            for(t=pi-1;t>=0;t--)
            {
                if(a[t]==0&&flag==0)//处理一次啊前导0,估计属于无用的一步
                    continue;
                else
                {
                    flag=1;
                    printf("%d",a[t]);
                }
               
            }
            printf("
    ");
            if(i!=n)//对于2组之间加空行的情况
                printf("
    ");
        }
        return 0;   
    }

    */

    //……………………………………………………………………....................................

    我写的(未AC)

    #include <stdio.h>
    #include <string.h>
    int main()
    {
    char str1[100], str2[100];
    int i, len1,len2,j,n,x,y,flag;
    scanf("%d",&n);
    for(j=0;j<n;j++)
    {
    
    
    int a[1000]={0};
    flag=0; 
    
    
    scanf("%s",str1);
    scanf("%s",str2);
    len1= strlen(str1);
    len2 = strlen(str2);
    
    
    x=len1-1;
    y=len2-1;
    i=0;
    printf("Case %d:
    ",j+1);
    
    printf("%s + %s = ",str1,str2);
    for(x,y;x>=0&&y>=0;)
    {
    if(a[i]+(str1[x]-'0'+str2[y]-'0')>=10)
    {
    a[i]=a[i]+str1[x]-'0'+str2[y]-'0'-10;
    a[i+1]++;
    }
    else
    a[i]=a[i]+str1[x]-'0'+str2[y]-'0';
    //printf("%d",a[i]);
    i++;
    x--;                          
    y--;
    }
    //printf("第一个x:  %d	 i=%d",x,i);
    
    
    //printf("第二个y:  %d",y);
    if(x>=0)
    {
    for(x;x>=0;x--)
    {
    a[i]=a[i]+str1[x]-'0';
    // printf("*%d*",a[i]);
    i++;
    }
    }
    else if(y>=0)
    {
    for(y;y>=0;y--)
    {
    a[i]=a[i]+str2[y]-'0';
    // printf("%d",a[i]);
    i++;
    }
    }
    else if(a[i]!=0)
    a[i+1]++;
    //printf("
    ");
    for(i;i>=0;i--)
    if(flag==0)
    {
    printf("%.d",a[i]);
    flag =1;
    }
    else
    printf("%d",a[i]);
    printf("
    ");
    
    if(j<n-1)
    printf("
    ");
    }
    return 0;
    } 



  • 相关阅读:
    关于SVN更新慢的解决方法
    用PS做法线,高光贴图的最简图文教程
    3dmax教程 人物+骨骼+蒙皮+动画教程
    django 模板视图,表单视图,各种视图
    django settings最佳配置
    groovy 弹出菜单
    python construct文档
    用powershell实现自动化操作
    如何用chrome扩展将网页变成黑底白字,用以保护视力
    打造基于CentOS7的xfce最简工作环境
  • 原文地址:https://www.cnblogs.com/qie-wei/p/12094151.html
Copyright © 2020-2023  润新知