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

这是一道关于多进制数计算的问题,来源于2014年5月8日的华为面试,题目要求进行特定的计算操作并得出样例输出为200。
摘要由CSDN通过智能技术生成
二师弟的星际加法 
 描述: 
 我是网络公司的一名普通程序员,英文名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 100
char 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;
		else
			b[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;
		else
			length_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;
		else
			length_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);
	else
		b=(char)(a+87);
	return b;
}


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值