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;
}

转载于:https://www.cnblogs.com/candycloud/p/3333493.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
图像识别技术在病虫害检测中的应用是一个快速发展的领域,它结合了计算机视觉和机器学习算法来自动识别和分类植物上的病虫害。以下是这一技术的一些关键步骤和组成部分: 1. **据收集**:首先需要收集大量的植物图像据,这些据包括健康植物的图像以及受不同病虫害影响的植物图像。 2. **图像预处理**:对收集到的图像进行处理,以提高后续分析的准确性。这可能包括调整亮度、对比度、去噪、裁剪、缩放等。 3. **特征提取**:从图像中提取有助于识别病虫害的特征。这些特征可能包括颜色、纹理、形状、边缘等。 4. **模型训练**:使用机器学习算法(如支持向量机、随机森林、卷积神经网络等)来训练模型。训练过程中,算法会学习如何根据提取的特征来识别不同的病虫害。 5. **模型验证和测试**:在独立的测试集上验证模型的性能,以确保其准确性和泛化能力。 6. **部署和应用**:将训练好的模型部署到实际的病虫害检测系统中,可以是移动应用、网页服务或集成到智能农业设备中。 7. **实时监测**:在实际应用中,系统可以实时接收植物图像,并快速给出病虫害的检测结果。 8. **持续学习**:随着时间的推移,系统可以不断学习新的病虫害样本,以提高其识别能力。 9. **用户界面**:为了方便用户使用,通常会有一个用户友好的界面,显示检测结果,并提供进一步的指导或建议。 这项技术的优势在于它可以快速、准确地识别出病虫害,甚至在早期阶段就能发现问题,从而及时采取措施。此外,它还可以减少对化学农药的依赖,支持可持续农业发展。随着技术的不断进步,图像识别在病虫害检测中的应用将越来越广泛。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值