zoukankan      html  css  js  c++  java
  • 2.100位内的20进制数相加

    /*在22世纪,科学家们发现智能居民生活在火星。火星人非常喜欢数学。每一年,他们将举行一次火星算术大赛(计算机) ,竞赛内容是计算两个100位数的和,使用时间最少的人获得冠军。今年,他们还邀请地球上的人参加竞赛。  
     *
     * 作为唯一代表地球,你发送给火星以展示人类的力量。幸运的是你带去的的笔记本电脑可以帮助您快速完成工作。现在剩下的问题只是写一个小程序来计算的两个给定数字的和。然而,在你开始写程序前要注意的是,火星人使用20进制数,因为它们通常有20个手指。  
     *
     * 输入:  
     *  
     *  给定一些火星数,每个一行。火星数是由0到9 ,和小写字母 a 至 j 组成的(小写字母a开始分别代表10 , 11 , ... , 19 )。所有给定数字的位数不会超过100 。  
     *
     *  输出:  
     *  对于每一对数字,在一行中输出它们的和。  
     *
     *  样本输入:  
     *
     *  1234567890  
     *  abcdefghij  
     *示例输出:  

     bdfi02467j  
     *  */

    /*算法实现:字符串-》数组-》数组表示的数相加运算-》字符串*/
    #include<iostream>
    #include<string.h>
    #include<stdlib.h>
    using namespace std;
    int code(char in){//字符串转换为数组编码
        switch(in){
            case '0':
                return 0;
                break;
            case '1':
                return 1;
                break;
            case '2':
                return 2;
                break;
            case '3':
                return 3;
                break;
            case '4':
                return 4;
                break;
            case '5':
                return 5;
                break;
            case '6':
                return 6;
                break;
            case '7':
                return 7;
                break;
            case '8':
                return 8;
                break;
            case '9':
                return 9;
                break;
            case 'a':
                return 10;
                break;
            case 'b':
                return 11;
                break;
            case 'c':
                return 12;
                break;
            case 'd':
                return 13;
                break;
            case 'e':
                return 14;
                break;
            case 'f':
                return 15;
                break;
            case 'g':
                return 16;
                break;
            case 'h':
                return 17;
                break;
            case 'i':
                return 18;
                break;
            case 'j':
                return 19;
                break;
            default:
                cout<<"字符输入有误!!"<<endl;
                break;
        }
    }

    int *transplate(char*s){//酱紫副传转换成数组,用于计算
        int len = strlen(s);
        int *a = new int[len];
        for(int i = 0;i<len;++i){
            a[i] = code(s[i]);
        }
        return a;
    }

    int *add(char *s1,char *s2){//计算两个数组表示的多位20进制数相加的具体算法
        int len1 = strlen(s1);
        int len2 = strlen(s2);
        int max;
        int min;
        int *maxstr;
        int *minstr;
        if(len1 > len2){
            max = len1;
            min = len2;
            maxstr = transplate(s1);
            minstr = transplate(s2);
        }else{
            max = len2;
            min = len1;
            maxstr = transplate(s2);
            minstr = transplate(s1);
        }
        for(int i = 0;i<max;++i){
            cout<<maxstr[i]<<"    ";
        }
        cout<<endl;
        for(int i = 0;i<min;++i){
            cout<<minstr[i]<<"    ";
        }
        cout<<endl;
        int *a = new int[max+1];
        for(int i = 1;i<=max;++i){
            a[i] = maxstr[i-1];
        }
        a[0] = 0;
        int m = 0;
        int temp = 0;
        int j = 1;
        for(;j<=min;++j){
            temp = m + maxstr[max-j] + minstr[min-j];
            if(temp > 19){
                m = 1;
                a[max+1-j] = temp - 20;
            }else{
                m = 0;
                a[max +1 -j] = temp;
            }
        }
        a[max+1-j] = a[max+1-j] + m;
        return a;
    }
    char code_c(int s){//数组转换成字符串编码
        switch(s){
            case 0:
                return '0';
                break;
            case 1:
                return '1';
                break;
            case 2:
                return '2';
                break;
            case 3:
                return '3';
                break;
            case 4:
                return '4';
                break;
            case 5:
                return '5';
                break;
            case 6:
                return '6';
                break;
            case 7:
                return '7';
                break;
            case 8:
                return '8';
                break;
            case 9:
                return '9';
                break;
            case 10:
                return 'a';
                break;
            case 11:
                return 'b';
                break;
            case 12:
                return 'c';
                break;
            case 13:
                return 'd';
                break;
            case 14:
                return 'e';
                break;
            case 15:
                return 'f';
                break;
            case 16:
                return 'g';
                break;
            case 17:
                return 'h';
                break;
            case 18:
                return 'i';
                break;
            case 19:
                return 'j';
                break;
            default:
                cout<<"输入数字有误!!"<<endl;
                break;
        }
    }
    char *transplate_c(int *p,int len){//数组转换错字符串
        int j = 0;
        int lent = len;
        while(p[j] == 0){
            --lent;
            ++j;
        }
        char *s = new char[lent];
        for(int i = 0;i<len-j;++i){
            s[i] = code_c(p[i+j]);
        }
        return s;
    }
    int main(){
        char *s = "1234567890";//测试数据
        char *s1 = "abcdefghij";//测试数据
        int *p = add(s,s1);
        for(int i = 0;i<=10;++i){
            cout<<p[i]<<" ";
        }
        cout<<endl;
        char *e = transplate_c(p,1+strlen(s));
        cout<<e<<endl;
        return 0;
    }

  • 相关阅读:
    Windows Phone 7 中常用Task
    设置Highchart柱子最大宽度( 让 highcharts支持maxPointWidth属性)
    Asp.Net MVC 使用FileResult导出Excel数据文件
    js获取网页高度
    使用window.addEventListener 和 window.attachEvent 判断浏览器
    slimscroll滚动条插件简单用法
    js中如何快速获取数组中的最大值最小值
    js 判断浏览器类型
    python使用ldap进行用户认证
    关于go声明切片的一些疑问
  • 原文地址:https://www.cnblogs.com/candycloud/p/3333493.html
Copyright © 2011-2022 走看看