zoukankan      html  css  js  c++  java
  • nyist A+B Problem IV

    A+B Problem IV

    时间限制:1000 ms  |  内存限制:65535 KB
    难度:3
    描述
    acmj最近发现在使用计算器计算高精度的大数加法时很不方便,于是他想着能不能写个程序把这个问题给解决了。
    输入
    包含多组测试数据
    每组数据包含两个正数A,B(可能为小数且位数不大于400)
    输出
    每组输出数据占一行,输出A+B的结果,结果需要是最简的形式。
    样例输入
    1.9 0.1
    0.1 0.9
    1.23 2.1
    3 4.0
    样例输出
    2
    1
    3.33
    7

    字符串处理
    考虑0这个特殊的数


     #include <stdio.h>
    #include <string.h>
    
    #define N 905
    
    char ch_1[N],ch_2[N],ch1_1[N],ch1_2[N];
    char ch3[N],ch4[N];
    char ch5[N],ch6[N];/*整数加  和小数后的加*/
    void f()
    {
        ch_1[0] = '\0';
        ch_2[0] = '\0';
        ch1_1[0] = '\0';
        ch1_2[0] = '\0';
        ch5[0] = '\0';
        ch6[0] = '\0';
    }
    void judge_char(char ch[],char ch1[],char ch2[])
    {
        ch1[0] = '\0';
        ch2[0] = '\0';
    
        int i = 0;
        for(i = 0; i < strlen(ch); i++)
            if(ch[i] == '.')
                break;
    
        int j = 0,k  = 0;
    
        for(j = 0; j < i; j++)
                ch1[j] = ch[j];
                ch1[j++] = '\0';
    
        int t = 0;
        for(k = i+1; k < strlen(ch); k++)
            {
                ch2[t++] = ch[k];
            }
            ch2[t] = '\0';
    }
    
    void add_int(char ch[],char ch1[],char ch2[],int kk)/*ch为长度短着  整数相加*/
    {
        ch2[0] = '\0';
    
        int i = 0,j = 0;
        int k = strlen(ch1)-1;
        int t = kk;
        int t1 = 0;
        int x = 0;
        for(i = strlen(ch)-1; i >= 0; i--)
        {
            x = (int) ch[i] + (int)ch1[k] - 2*'0' + t;
            t = x /10;
            x = x % 10;
            ch2[t1++] = x + '0';
            k--;
        }
    
        for(j = k; j >= 0; j--)
        {
        
            x = (int)ch1[j] +t - '0';
            t = x /10;
            x = x % 10;
            ch2[t1++] = x + '0';
    
        }
    
        if(t)
        {
            
            ch2[t1++] =(char)(t + '0');
            t = 0;
        }
        ch2[t1++] = '\0';
    }
    
    int add_float(char ch[],char ch1[],char ch2[])/*小数相加 ch为长度短着*/
    {
        ch2[0] = '\0';
    
        int i = 0;
        int j = 0;
        int k = 0;
        int t = 0;
        int t1 = 0;
        int x = 0;
    
        for(i = strlen(ch1) - 1; i >= strlen(ch); i--)
        {
            x = (int)(ch1[i] + t - '0');
    		t = x/10;
    		x %= 10;
            ch2[t1++] =(char)(x + '0');
    
        }
    
        for(j = strlen(ch)-1; j >=0 ; j--)
        {
            x = (int)(ch[j] + ch1[j] + t - 2*'0');
    		t = x /10;
    		x = x % 10;
            ch2[t1++] = (char)(x + '0');
        }
    
        ch2[t1++] = '\0';
        return t;
    }
    
    int main()
    {
        while(scanf("%s%s",ch3,ch4) !=EOF)
        {
            f();
            int kk = 0;
    
            judge_char(ch3,ch_1,ch_2);
            judge_char(ch4,ch1_1,ch1_2);
            
            if(ch_2[0] == '\0')
                {
                    ch_2[0] = '0';
                    ch_2[1] = '\0';
                }
            if(ch1_2[0] == '\0')
            {
                ch1_2[0] = '0';
                ch1_2[1] = '\0';
            }
    
            if(strlen(ch_2) > strlen(ch1_2))
                kk = add_float(ch1_2,ch_2,ch6);
            else
                kk = add_float(ch_2,ch1_2,ch6);
    
            if(strlen(ch_1) > strlen(ch1_1) )
                add_int(ch1_1,ch_1,ch5,kk);
            else
                add_int(ch_1,ch1_1,ch5,kk);
    
    		 int i = 0;
    		 int xx = 0;
    		 int yy = 0;
    		 for(i = 0;i <= strlen(ch6)-1; i++)
                if(ch6[i] == '0')
                    xx++;
            if(xx == strlen(ch6) )
                {
                    yy = strlen(ch5)-1;
    
                    for(i = yy; i >= 0; i-- )
                        if(ch5[i] != '0') break;
    
                    while(yy >= 0)
                    {
                        printf("%c",ch5[yy]);
                        yy--;
                    }
                    printf("\n");
                }
            else
            {
                    yy = strlen(ch5)-1;
                    while(yy >= 0)
                    {
                        printf("%c",ch5[yy]);
                        yy--;
                    }
                    printf(".");
                    yy = strlen(ch6)-1;
                    i = 0;
                    while(i <= yy)
                        {
                            if(ch6[i] != '0')
                            break;
                            i++;
                        }
    
                    while(yy >= i)
                    {
                        printf("%c",ch6[yy]);
                        yy--;
                    }
                    printf("\n");
            }
    
    
        }
        return 0;
    
    }
            
            
    
  • 相关阅读:
    java中的成员变量和局部变量
    多线程实现输出当前时间,和猜数字游戏
    JDBC
    jQuery和原生JS的对比
    JavaScript有趣的知识点
    MySQL的数据类型
    行级元素和块级元素
    重定向和请求转发的区别
    JSP九大内置对象
    Python练习
  • 原文地址:https://www.cnblogs.com/yyroom/p/2989067.html
Copyright © 2011-2022 走看看