华为编程大赛第二轮
2014-05-07 17:08
120 查看
二师弟的星际加法
描述:
我是网络公司的一名普通程序员,英文名Steven,发音比较像“师弟”,自从入职培训自我介绍后,大家就称我为“二师弟”,我喜欢看科幻小说,也喜欢做梦,有一次梦到外星球,发现外星人使用的并非10进制/16进制等,有些星球居然使用N进制(据统计N都在2~35之间),现在我们将首先给您一个数字表示N进制,然后给出两个数字的字符串,请算出其求和结果并输出,如果输入不能正常计算则输出-1。
说明:
1:数字的字符串其中包括0-9和a-z(表示10-35)。
2:所有的输入和输出都只会是小写字母或数字,不存在其他字符。
运行时间限制: 无限制
内存限制: 无限制
输入:
整形数:计算进制
字符串:计算数1
字符串:计算数2
输出:
字符串:计算结果
样例输入:
10
100
100
样例输出:
200
看到有用JAVA的同学的评论:Java的BigInteger跟开了作弊器一样
import java.math.BigInteger;
import java.util.InputMismatchException;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner cin = new Scanner(System.in);
int N = cin.nextInt();
if (N > 35 || N < 2)
System.out.println("-1");
else {
try {
BigInteger a = cin.nextBigInteger(N);
BigInteger b = cin.nextBigInteger(N);
BigInteger c = a.add(b);
System.out.println(c.toString(N));
}
catch (InputMismatchException e) {
System.out.println("-1");
}
}
}
}
然后是自己的C代码,写得很水:
描述:
我是网络公司的一名普通程序员,英文名Steven,发音比较像“师弟”,自从入职培训自我介绍后,大家就称我为“二师弟”,我喜欢看科幻小说,也喜欢做梦,有一次梦到外星球,发现外星人使用的并非10进制/16进制等,有些星球居然使用N进制(据统计N都在2~35之间),现在我们将首先给您一个数字表示N进制,然后给出两个数字的字符串,请算出其求和结果并输出,如果输入不能正常计算则输出-1。
说明:
1:数字的字符串其中包括0-9和a-z(表示10-35)。
2:所有的输入和输出都只会是小写字母或数字,不存在其他字符。
运行时间限制: 无限制
内存限制: 无限制
输入:
整形数:计算进制
字符串:计算数1
字符串:计算数2
输出:
字符串:计算结果
样例输入:
10
100
100
样例输出:
200
看到有用JAVA的同学的评论:Java的BigInteger跟开了作弊器一样
import java.math.BigInteger;
import java.util.InputMismatchException;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner cin = new Scanner(System.in);
int N = cin.nextInt();
if (N > 35 || N < 2)
System.out.println("-1");
else {
try {
BigInteger a = cin.nextBigInteger(N);
BigInteger b = cin.nextBigInteger(N);
BigInteger c = a.add(b);
System.out.println(c.toString(N));
}
catch (InputMismatchException e) {
System.out.println("-1");
}
}
}
}
然后是自己的C代码,写得很水:
#include<stdio.h> #include<string.h> #include <stdlib.h> #define MAX 100 void jinzhi_ten(int n_out,char *string1,char *string2,char *output); int caculate(int n,char *string1,char *string2,int length1,int length2,char *output); void jinzhi_n(int n_out,int sum,char *output); int main() { int N; int length1,length2; int flag=0; char str1[MAX],str2[MAX]; char output[MAX]; //N=getchar(); scanf("%d",&N); scanf("%s",str1); scanf("%s",str2); length1=strlen(str1); length2=strlen(str2); flag=caculate(N,str1,str2,length1,length2,output); if(flag==0) printf("-1"); else printf("%s",output); return 0; } int caculate(int n,char *string1,char *string2,int length1,int length2,char *output) { int out,n_out; int i; if(n>1&&n<=9) { n_out=n; jinzhi_ten(n_out,string1,string2,output); out=1; } else if(n>9&&n<35) { n_out=n; jinzhi_ten(n_out,string1,string2,output); out=1; } else out=0; for(i=0;i<length1;i++)//输入字符串1不符合规定,输出-1 { if((string1[i]>='0'&&string1[i]<='9')||(string1[i]>='a'&&string1[i]<='z')) { //out=out; if(string1[i]>='0'&&string1[i]<='9') { if(string1[i]-'0'>=n)//输入字符大于了进制数(如2进制输入了3) { out=0; break; } } else if(string1[i]>='a'&&string1[i]<='z') { if(string1[i]-'a'+10>=n)////输入字符大于了进制数(如10进制输入了b) { out=0; break; } } } else { out=0; break; } } for(i=0;i<length2;i++)//输入字符串2不符合规定,输出-1 { if((string2[i]>='0'&&string2[i]<='9')||(string2[i]>='a'&&string2[i]<='z')) { //out=out; if(string2[i]>='0'&&string2[i]<='9') { if(string2[i]-'0'>=n)//输入字符大于了进制数(如2进制输入了3) { out=0; break; } } else if(string2[i]>='a'&&string2[i]<='z') { if(string2[i]-'a'+10>=n) ////输入字符大于了进制数(如10进制输入了b) { out=0; break; } } } else out=0; } return out; } void jinzhi_ten(int n_out,char *string1,char *string2,char *output)//N进制变成10进制 { int i,j; int sum,sum1=0,sum2=0; int length1,length2; int b=1; length1=strlen(string1); length2=strlen(string2); if(n_out<10) { for(i=length1-1;i>=0;i--) { sum1 += (string1[i]-'0') *b; b *= n_out; } b=1; for(i=length2-1;i>=0;i--) { sum2 += (string2[i]-'0') *b; b *= n_out; } } else { for(i=length1-1;i>=0;i--) { if(string1[i]>='0'&&string1[i]<='9') sum1 += (string1[i]-'0') *b; else sum1 += (string1[i]-'a'+10) *b; b *= n_out; } b=1; for(i=length2-1;i>=0;i--) { if(string2[i]>='0'&&string2[i]<='9') sum2 += (string2[i]-'0') *b; else sum2 += (string2[i]-'a'+10) *b; b *= n_out; } } sum=sum1+sum2;//十进制的和 jinzhi_n(n_out,sum,output);//10进制抓化为n进制 } void jinzhi_n(int n_out,int sum,char *output)//10进制变为N进制 { int i=0,j=0,k=0; int tmp[MAX]; if(n_out<10) { do{ tmp[i]=sum%n_out; sum=sum/n_out; i++; }while(sum!=0); k=0; for(j=i-1;j>=0;j--) { output[k]=tmp[j]+'0'; k++; } output[k]='\0'; } else { do{ tmp[i]=sum%n_out; sum=sum/n_out; i++; }while(sum!=0); k=0; for(j=i-1;j>=0;j--) { if(tmp[j]>=10) output[k]=tmp[j]+'a'-10; else output[k]=tmp[j]+'0'; k++; } output[k]='\0'; } }
相关文章推荐
- 第二轮华为编程大赛2014-6-14
- 丁俊晖苦战九局不敌墨菲止步第二轮
- 迅雷四川大学(整个西南地区)C++第二轮笔试题(详解答案) ---堆排序
- 第二轮阅读作业
- 2013编程之美挑战赛复赛第二轮---招聘
- wwnjld团队第二轮迭代成员分数
- 2012华为编程大赛第三题
- 【华为编程大赛】实现一个开放的书名检索库
- 2014年百度之星程序设计大赛 - 初赛(第二轮)Chess
- 计算机学院研发第二轮考核-------利用WebSetting来浏览网页进行优化(js脚本加载,图片,可放大缩小等)
- Bootstrap3.0学习第二轮(栅格系统原理)
- 【百度之星2014~初赛(第二轮)解题报告】Chess
- 2014华为编程大赛题目1:外星人比数的大小
- 【GDOI2017第二轮模拟day2】中位数
- 【书籍下载链接】_2_第二轮_计算机专业书籍
- 第二轮冲刺第三天
- 第二轮工作进度
- 迅雷四川大学(整个西南地区)C++第二轮笔试题(详解答案)
- 多益网络2013校园招聘第二轮笔试题目
- 2013华为编程大赛成都第三组 求复数的平均值