求c语言大神帮忙啊!

 我来答
风若远去何人留
2014-12-16 · 知道合伙人互联网行家
风若远去何人留
知道合伙人互联网行家
采纳数:20412 获赞数:450134
专业C/C++软件开发

向TA提问 私信TA
展开全部

大致如此 供参考  不懂追问

#include <stdio.h>

int check(char *str, int c)
{
int i;
int max;
if(c == 16) max = '9';
else max = c+'0'-1;
for(i = 0; str[i]; i ++)
{
if(str[i]>='0' && str[i] <= max)continue;
if(c == 16 && ((str[i] <= 'F' && str[i] >= 'A') || (str[i] <= 'f' && str[i] >= 'a')))
continue;
return -1;
}

return 0;
}

int str_to_dec(char *str, int c)
{
int i;
int ret = 0, t;

for(i = 0; str[i]; i ++)
{
if(c == 16 && (str[i] <= 'F' && str[i] >= 'A'))
t = str[i] - 'A' + 10;
else if(c == 16 && (str[i] <= 'f' && str[i] >= 'a'))
t = str[i] - 'a' + 10;
else t = str[i] - '0';
ret *=c;
ret += t;
}

return ret;
}

void dec_to_str(int v, char *dst, int c)
{
char tmp[33] = {0};
int t;
int i = 0;

while(v)
{
t = v%c;
v/=c;
if(t < 10) 
tmp[i ++] = t+'0';
else tmp[i++] = t + 'A' - 10;
}
tmp[i] = 0;
for(t = 0; t < i; t ++)
dst[t] = tmp[i - t - 1];
dst[t] = 0;
}

int main()
{
int c, c1;
char src[33], dst[33];
int v;

printf("输入进制:\n");
scanf("%d", &c);
if(c != 2 && c != 8 && c != 10 && c != 16)
{
printf("不支持\n");
return -1;
}
printf("输出进制:\n");
scanf("%d", &c1);
if(c1 != 2 && c1 != 8 && c1 != 10 && c1 != 16)
{
printf("不支持\n");
return -1;
}
printf("输入数字为:\n");
scanf("%s", src);
if(check(src, c))
{
printf("输入字符串非法\n");
return -2;
}
if(c == c1) printf("%s\n", src);
else
{
v = str_to_dec(src, c);
if(c1 == 10) printf("%d\n", v);
else
{
dec_to_str(v, dst, c1);
printf("%s\n", dst);
}
}
return 0;
}
匿名用户
2014-12-16
展开全部
#include <stdio.h>
#include "math.h"
#include "string.h"

#define NUM_LENGTH    50

char IntToChar[] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' };

// Convert a char to integer ,like: F = 15
int ConvertCharToInt(char ch)
{
switch (ch)
{
case '0':
return 0;
case '1':
return 1;
case '2':
return 2;
case '3':
return 3;
case '4':
return 4;
case '5':
return 5;
case '6':
return 6;
case '7':
return 7;
case '8':
return 8;
case '9':
return 9;
case 'A':
return 10;
case 'B':
return 11;
case 'C':
return 12;
case 'D':
return 13;
case 'E':
return 14;
case 'F':
return 15;
default:
return -1;
}
}

// Convert A x-base number to tenbase
int ConvertToTenBase(const char *result, int origBase)
{
int ret, i;
int len = strlen(result);

ret = 0;
for (i = 0; i < len; i++)
{
ret += ConvertCharToInt(result[len - 1 - i]) * pow(origBase, i);
}
return ret;
}

void ReverseString(char *str)
{
int i, j;
char temp;

if (str == NULL)
{
return;
}

for (i = 0, j = strlen(str) - 1; i < j; i++, j--)
{
temp = str[i];
str[i] = str[j];
str[j] = temp;
}
}

// Convert A Tenbase integer to dest base
void ConvertToDestBase(char *result, int tenBaseResult, int destBase)
{
int temp = 0, i = 0;
if (tenBaseResult == destBase)
{
return;
}
memset(result, 0, NUM_LENGTH);

while (tenBaseResult != 0)
{
temp = tenBaseResult % destBase;
tenBaseResult = tenBaseResult / destBase;
result[i] = IntToChar[temp];
i++;
}
ReverseString(result);
}

int main()
{
char result[NUM_LENGTH];
int origBase;
int destBase;
int tenbaseResult;

// Input: number origBase destbase
scanf("%s%d%d", result, &origBase, &destBase);//输入 n,待转换的进制,目标进制

// Convert To Ten Base
tenbaseResult = ConvertToTenBase(result, origBase);

// Convert to dest Base
ConvertToDestBase(result, tenbaseResult, destBase);

printf("%s\n", result);

system("pause");
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
夜塘下j
2014-12-16 · TA获得超过190个赞
知道答主
回答量:547
采纳率:0%
帮助的人:121万
展开全部
好吧
更多追问追答
追问
大神,有答案求私信发一下呀!
追答
忘得差不多了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
cdyzxy
推荐于2016-11-28 · TA获得超过2.1万个赞
知道大有可为答主
回答量:1.4万
采纳率:85%
帮助的人:3767万
展开全部
char jstr[4][5]={ "二","八","十","十六" };
int jz[4]={2,8,10,16};
int mMenu()
{ char str[80];
int rt=-1,n;
INPUTAGAIN1:
printf("\n\n------------------------------\n\n");
printf("*请选择菜单功能:\n");
printf(" 1.输入二进制进行进制转换\n");
printf(" 2.输入八进制进行进制转换\n");
printf(" 3.输入十进制进行进制转换\n");
printf(" 4.输入十六进制进行进制转换\n");
printf(" 0.退出\n");
printf("*请输入选项前面的数字并回车:");
scanf("%s",str);
if ( str[0]>='0' && str[0]<='4' ) rt=str[0]-'0';
else { printf("\n--输入的%c是无效编号,请重新输入",str[0]); goto INPUTAGAIN1; }
if ( rt==0 ) return rt;
printf("\n输入%s进制数\n",jstr[rt-1]);
INPUTAGAIN2:
printf("*请输入转换成几进制数(2、8、10或16):");
scanf("%d",&n);
if ( n!=2 && n!=8 && n!=10 && n!=16 || n==jz[rt-1] )
{ printf("\n--输入有误,请重新输入\n\n");
goto INPUTAGAIN2;
}
rt*=100; rt+=n;
return rt;
}
int mGetData(char *str,char *data)
{ int n=0;
while ( *str )
{ if ( (*str)>='0' && (*str)<='9' ) data[n]=(*str)-'0';
else if ( (*str)>='A' && (*str)<='F' ) data[n]=(*str)-'A';
else if ( (*str)>='a' && (*str)<='f' ) data[n]=(*str)-'a';
else return -1;
n++; str++;
}
return n;
}
void mConvertData(char *data,char *str,int n,int x,int y)
{ int z,i,rt;
char sss[80],js[17]={ "0123456789ABCDEF" };
z=0; for ( i=0;i<n;i++ ) { z*=x; z+=data[i]; }
rt=0; while ( z ) { sss[rt]=js[z%y]; z/=y; rt++; }
for ( i=0;i<rt;i++,str++ ) (*str)=sss[rt-i-1]; (*str)=0;
}
void main()
{
int s,n,i,b;
char str[80],data[80],str1[80];
while ( 1 )
{ s=mMenu(); if ( s==0 ) break;
INPUTAGAIN3:
printf("\n\n*请输入要转换的%s进制数:",jstr[s/100-1]);
scanf("%s",str);
n=mGetData(str,data); b=0;
if ( n<=0 ) b=1; else for ( i=0;i<n;i++ ) if ( data[i]>=jz[s/100-1] ) b=1;
if ( b ) { printf("\n--输入有误,请重新输入\n"); goto INPUTAGAIN3; }
mConvertData(data,str1,n,jz[s/100-1],s%100);
printf("%d进制数%s转换成%d进制数等于%s\n\n\n",jz[s/100-1],str,s%100,str1);
}
}
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式