• 火星A+B(字符串整形转化,进制)


    Description

    读入两个不超过25位的火星正整数A和B,计算A+B。需要注意的是:在火星上,整数不是单一进制的,第n位的进制就是第n个素数。例如:地球上的10进制数2,在火星上记为“1,0”,因为火星个位数是2进制的;地球上的10进制数38,在火星上记为“1,1,1,0”,因为火星个位数是2进制的,十位数是3进制的,百位数是5进制的,千位数是7进制的…… 
     

    Input

    测试输入包含若干测试用例,每个测试用例占一行,包含两个火星正整数A和B,火星整数的相邻两位数用逗号分隔,A和B之间有一个空格间隔。当A或B为0时输入结束,相应的结果不要输出。 
     

    Output

    对每个测试用例输出1行,即火星表示法的A+B的值。 
     

    Sample Input

    1,0 2,1 4,2,0 1,2,0 1 10,6,4,2,1 0 0
     

    Sample Output

    1,0,1 1,1,1,0 1,0,0,0,0,0
     
    个人感想
    这道题测试了很多次,忘掉等号开以及字符数组太小等问题浪费了时间
     
    source
     
    #include <stdio.h>
    #include <math.h>
    #include <string.h>
    
    int prime(int x)
    {
        int flag = 1;
        for(int i = 2; i <= sqrt(x); i++)
        {
            if(x % i == 0)
            {
                flag = 0;
                break;
            }
        }
        return flag;
    }
    int main()
    {
        int p[30], top = 0, len1, len2, num1[30], num2[30], ans[30];
        char str1[1000], str2[1000];
        for(int i = 2; top < 25; i++)
        {
            if(prime(i))
            {
                p[top++] = i;
                //printf("%d
    
    ", p[top-1]);
            }
        }
        while(~scanf("%s%s", str1, str2))
        {
            if(strcmp(str1, "0") == 0 || strcmp(str2, "0") == 0)
                break;
            memset(num1, 0, sizeof(num1));
            memset(num2, 0, sizeof(num2));
            memset(ans, 0, sizeof(ans));
            top = 0;
            int k = 1, cnt;
            len1 = strlen(str1);
            len2 = strlen(str2);
            /*for(int i = 0; i < len1; i++)
            {
                printf("%c:%c
    ", str1[i], str2[i]);
            }
            printf("
    
    "); */
            //printf("len1 = %d    len2 = %d
    ", len1, len2);
            for(int i = len1 - 1; i >= 0; i--)
            {
                if(str1[i] == ',')
                {
                    top++;
                    k = 1;
                    continue;
                }
                num1[top] += (str1[i] - '0') * k;
                //printf("i = %d : num1[%d] = %d
    
    ", i, top, num1[top]);
                k = k*10;
            }
            cnt = top+1;
            //printf("cnt = %d
    ", cnt);
            top = 0;
            k = 1;
            for(int i = len2 - 1; i >= 0; i--)
            {
                if(str2[i] == ',')
                {
                    top++;
                    k = 1;
                    continue;
                }
                num2[top] += (str2[i] - '0') * k;
                //printf("i = %d : num2[top] = %d
    
    ", i, top, num2[top]);
                k = k*10;
            }
            if(top+1 > cnt)
                cnt = top+1;
            //printf("cnt = %d
    ", cnt);
            for(int i = 0; i < cnt; i++)
            {
                ans[i] += num1[i] + num2[i];
                while(ans[i] >= p[i] && p[i] != 0)
                {
                    ans[i+1] += ans[i] / p[i];
                    ans[i] %= p[i];
                }
                //printf("ans[%d] = %d, num1[%d] = %d, num2[%d] = %d
    ", i, ans[i], i, num1[i], i, num2[i]);
                k = i+1;
            }
            if(ans[k])
                    printf("%d,", ans[k]);
            for(int i = cnt-1; i > 0; i--)
                printf("%d,", ans[i]);
            printf("%d
    ", ans[0]);
        }
    }
  • 相关阅读:
    JavaScript_01简介,基本语法,运算符
    JAVA_内部类
    JAVA_接口_默认方法&静态方法
    软件工程_01面向对象分析
    mybatis_16逆向工程
    mybatis_15整合ehcache
    mybatis_14二级缓存
    mybatis_13一级缓存
    mybatis_12延时加载_懒加载
    JWT如何在Spring Cloud微服务系统中在服务相互调时传递
  • 原文地址:https://www.cnblogs.com/rain-1/p/4757085.html
Copyright © 2020-2023  润新知