华为题目(多进制数的计算)。。。2014.5.8

来源:互联网 发布:沈阳沐洋软件 编辑:程序博客网 时间:2024/06/10 16:55
二师弟的星际加法 
 描述: 
 我是网络公司的一名普通程序员,英文名Steven,发音比较像“师弟”,
 自从入职培训自我介绍后,大家就称我为“二师弟”,我喜欢看科幻小说,
 也喜欢做梦,有一次梦到外星球,发现外星人使用的并非10进制/16进制等,
 有些星球居然使用N进制(据统计N都在2~35之间),现在我们将首先给您一个数字表示N进制,
 然后给出两个数字的字符串,请算出其求和结果并输出,如果输入不能正常计算则输出-1。
 说明:
 1:数字的字符串其中包括0-9和a-z(表示10-35)。
 2:所有的输入和输出都只会是小写字母或数字,不存在其他字符。
 运行时间限制: 无限制 
 内存限制: 无限制 
 输入: 整形数:计算进制
 字符串:计算数1
 字符串:计算数2
 输出: 字符串:计算结果 
 样例输入: 10
 100
 100

 样例输出: 200

#ifndef _CHAR_INT_#define _CHAR_INT_#include<STDLIB.H>"char_int.h"#include <STDIO.H>#include<STRING.H>#define M 100char char_int(int a);#endif

#include "char_int.h"int main(){int N;char A[M];char B[M];char C[M];int  a[M],length_a;int  b[M],length_b;int  c[M],length_c;int i;/*输入*/printf("please Enter the number of Decimal:\n");scanf("%d",&N);fflush(stdin);printf("please Enter The string1:\n");gets(A);fflush(stdin);length_a=strlen(A);printf("please Enter The string2:\n");gets(B);length_b=strlen(B);fflush(stdin);    /*处理*//*将A中的字符都变成相对应的数字*/for(i=0;i<length_a;i++){a[i]=(int)(A[length_a-1-i]);if(a[i]>=48&&a[i]<=57)a[i]=a[i]-48;else        a[i]=a[i]-87;if(a[i]>=N)return printf("-1 \n");}/*将B中的字符都变成相对应的数字*/for(i=0;i<length_b;i++){b[i]=(int)B[length_b-1-i];if(b[i]>=48&&b[i]<=57)b[i]=b[i]-48;elseb[i]=b[i]-87;if(b[i]>=N)return printf("-1 \n");}/*将A与B相加后所得的结果放在C中*/if(length_a>=length_b){for(i=length_b;i<length_a;i++)b[i]=0;for(i=0;i<length_a+1;i++)c[i]=0;for(i=0;i<length_a;i++){c[i]=a[i]+b[i]+c[i];if(c[i]>=N){c[i+1]=1;c[i]=c[i]-N;}}if(c[length_a]==0)length_c=length_a;elselength_c=length_a+1;}else{for(i=length_a;i<length_b;i++)a[i]=0;for(i=0;i<length_b+1;i++)c[i]=0;for(i=0;i<length_b;i++){c[i]=a[i]+b[i]+c[i];if(c[i]>=N){c[i+1]=1;c[i]=c[i]-N;}}if(c[length_b]==0)length_c=length_b;elselength_c=length_b+1;}for(i=0;i<length_c;i++)C[i]=char_int(c[length_c-1-i]);for(i=0;i<length_c;i++)printf("%c  ",C[i]);printf("\n");return 0;}

#include "char_int.h"/******************************************************将char型的字符转成相对应的10进制数字******************************************************/char char_int(int a){char b;if(a>=0&&a<=9)b=(char)(a+48);elseb=(char)(a+87);return b;}


0 0
原创粉丝点击