问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

求解一道C语言基础编程题。。

发布网友 发布时间:2022-04-30 00:30

我来回答

3个回答

热心网友 时间:2022-06-27 06:03

intbase(intk,chars[])//按定义,k是进制(2~16),s是输入的字符串

{

int len=0,sum=0; //len 指s字符串长度,sum指转换后的k进制数

int i,j,t,n;

while (s[len]!='\0') len++; //计算s数组长度,也就查看用户从键盘输入了多少字符

i=len-1; //从最高位开始,也就是从最右侧开始计算,比如s=1234ab,先从b开始计算

while (s[i]!='\0') //逐个读取字符串s,第i位的具体字符值,s[i]是否有效

{

n=0; //s[i]是字符(char),s[i]转换成10进制对应的值

if (s[i]>='0'&&s[i]<='9') //查ascii码表

n=s[i]-48; //48即字符 '0'

else if (s[i]>='A'&&s[i]<='F') //A--F用来代表10进制下的10~15

n=10+s[i]-'A'; //s[i]是字符(char),s[i]转换成10进制对应的值

t=1;

for (j=0; j<len-i-1; j++) t=t*k;

/* //以上语句等于如下形式,s[i]对应的倍率,假设k=10,就好理解

t=1; //个位,即i=len-1时

t=1*k; //十位 即i=len-2时

t=1*k*k; //百位

t=1*k*k*k; //千位

.....

*/

sum += n*t; //合计,个+十+百+千+...

i--;

}

return (sum);

}

main()

{

int sz;

char str[20];

scanf("%d %s",&sz,str);

if (sz<2||sz>16)

printf("输入错误。\n");

else

printf("%d\n",base(sz,str));

}

热心网友 时间:2022-06-27 06:03

举个例子你就懂了,以16进制的2ABC为例,16进制转为10进制的方法,就是从右到左,依次用该位的数字乘以16的0次方、16的1次方、16的2次方(同样如果是其它进制,比如8进制,那就是8的0次方、1次方等等)。。之和,比如说2ABC转10进制,就等于
2ABC(16)=C*1+B*16+A*16*16+2*16*16*16
你上面这个代码就是模拟这个过程,从最后一位起,先将字符转为实际对应的数字,比如说输入的是2A,那么'A'对应的数字就是10+'A'-'A'=11,同样的'2'对应的数字就是'2'-'0'=2(或者'2'-48=2,48即'0'的ascii)得到的数字放在n里,然后用t来计算每一次该乘以多少(比如最后一位,t就是1,倒数第二位,t就是16,倒数第三位,t就是16*16),之后再通过sum+=n*t累加。

while (s[len]!='\0') len++; //通过循环获取长度,实际上在string.h里有strlen可以直接获取

i=len-1;

while (s[i]!='\0') { //循环开始

n=0;

if (s[i]>='0'&&s[i]<='9') //if else计算每一位实际对应的10进制数字

n=s[i]-48;

else if (s[i]>='A'&&s[i]<='F')

n=10+s[i]-'A';

t=1;

for (j=0; j<len-i-1; j++) t=t*k; //计算当前位应该乘以多少,比如i起始是len-1,那么j=0;j<len-i-1实际上就是j<0;没有循环,t为1,下一次循环i是len-2,j<len-(len-2)-1即为j<1,循环一次,t=1*16=16,同样,再下一次就是16*16

printf("****%d\n",t);

sum += n*t;//累加

i--;

}

不过这样写确实有些繁琐,也没啥必要,可以是

int base(int k,char s[])
{
int len=0,sum=0;
int i,n;
while (s[len]!='\0') len++;
for(i=0;i<len;i++)
{
if (s[i]>='0'&&s[i]<='9')
n=s[i]-48;
else if (s[i]>='A'&&s[i]<='F')
n=10+s[i]-'A';
sum=sum*k+n;
}
return sum;
}

热心网友 时间:2022-06-27 06:04

int base(int k, char s[])
{
int len=0,sum=0;
int i,j,t,n;

while (s[len]!='\0') len++;
i=len-1;
while (s[i]!='\0')
{
n=0;
if (s[i]>='0'&&s[i]<='9')
n=s[i]-48;
else if (s[i]>='A'&&s[i]<='F')
n=10+s[i]-'A';
t=1;
for (j=0; j<len-i-1; j++) t=t*k;
sum += n*t;
i--;
}
return (sum);
}
main()
{
int sz;
char str[20];

scanf("%d %s",&sz,str);
if (sz<2||sz>16)
printf("输入错误。\n");
else
printf("%d\n",base(sz,str));
}
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
深度解析:第一财经回放,探索财经新风向 逆水寒手游庄园怎么邀请好友同住 逆水寒手游 逆水寒不同区可以一起组队吗? 逆水寒手游 逆水寒怎么进入好友世界? 逆水寒手游 逆水寒怎么去别人的庄园? 使用puppeteer实现将htmll转成pdf 内卷时代下的前端技术-使用JavaScript在浏览器中生成PDF文档 【译】将HTML转为PDF的几种实现方案 变形金刚08动画怎么样 变形金刚08动画的问题 写事的作文200~300字 三年级 九游版部落冲突如何更改网络实名认证 QQ音乐上添加的歌曲能不能永久保存 求q版动漫人物。。。越多越好。。。快。。。急急急。。。? 女孩例假期间不能吃什么 跪求一些q版动漫人物。。。 画画用的。。。 qq音乐怎么让自己的歌曲永久保存? 女生来例假的时候不能吃什么? q版动漫人物 四人的 oracle 11g 64位的备份能否恢复到oracle 10g 32位?求恢复方法 谁知道QQ音乐里的歌曲怎么永久保存啊??? 遵守法纪从我做起小学生读本400字作文读后感 我和书的故事(或我读书的体会)400字以上 小学五年级水平 中间有零大写怎么写 理肤泉营润身体乳霜和欧舒丹乳木果油身体润肤露哪个好丫 大写0怎么写? 多少毫升牛奶是一公斤 挤奶牛一公斤奶多少钱 听长亭外古道边的歌 汉字0怎么写 中国win11正式版发布时间是什么时候? 高分求包装盒设计展开图``有的进来看看`有追加` c语言程序设计的基础题目求教,请给解析(多追积分) 帮帮我.谁有包装盒的平面展开图啊?带尺寸的那种 黑龙江省的省会(行政中心)是( )A.哈尔滨B.长沙C.沈阳D.长 LED显示屏箱体分辨率是什么意思 我国的省级行政中心 求解C语言基础编程题 已知一个包装盒的表面展开图如图.(1)若此包装盒的容积为1125cm3,请列出关于x的方程,并求出x的值;( 为什么我国省级地区的行政中心叫省会而自治区的行政中心却叫首府? 如图是一个圆柱形包装盒的表面展开图,这个包装盒的表面积是多少?[底面周长6.28,高2.5】 木材化学如何干燥? 为什么省政府都是位于省会城市 灭火器用完了可以去那重新灌装呀 省会是什么意思? 消防瓶用完了到哪里灌? 灭火器去哪灌装? 马尾辫怎么扎简单好看 2014流行的韩式马尾辫扎法图解 韩式马尾辫怎么扎? 马尾辫怎么扎蓬松 气质韩式学生马尾辫扎法