求助
问题请写一段程序将17进制数转换为10进制。
输入格式:
为一个只包含小写字母的字符串(其中a代表17进制的0,b代表17进制的1,以此类推直到q代表17进制的16),字符串以’\n’结束。
输出格式:
是一个整数,转换后的10进制数。测试用例保证合法,且转换后的整数可以用int存储。
输入样例:
caa
输出样例:
578
我的代码问题在哪
#include<stdio.h>
#define AA 1024
int main()
{
int num1=0,num2,ii,pp;
char ch;
int aa;
for( (ch=getchar()),num2=0 ;num2<AA; num2++ )
{
if(ch = '\n')
{
break;
}
else
{
aa = int(ch) - 97;
}
}
for( ii=0,pp=num2 ;ii<num2+1; ii++,pp-- )
{
num1 = num1 + aa*(17^ii);
}
printf("%d",num1);
}
运行结果
caa
2465
在您的代码中有几个问题需要修正:
1. 在if(ch = '\n')这一行,您使用了单个等号=而不是相等比较运算符==。应该使用if(ch == '\n')来判断换行符。
2. 在计算17进制转换为10进制的过程中,您使用了错误的运算符^。在C/C++中,^是按位异或运算符,而不是求幂运算符。要计算17的幂次方,您可以使用pow函数或者自己编写一个幂函数。
3. 在循环中,将num2作为循环条件可能会导致数组越界。建议使用另外一个变量来记录字符串的长度,并将其作为循环条件。
根据上述修改,以下是修正后的代码:
#include <stdio.h>
#include <math.h>
#define AA 1024
int main() {
int num1 = 0, num2, ii, pp;
char ch;
int aa;
int length = 0;
for (ch = getchar(), num2 = 0; num2 < AA; num2++) {
if (ch == '\n') {
break;
} else {
aa = ch - 'a';
length++;
}
ch = getchar();
}
for (ii = 0, pp = length - 1; ii < length; ii++, pp--) {
num1 += aa * pow(17, ii);
}
printf("%d", num1);
return 0;
}
这样,您的代码应该能够正确将17进制数转换为10进制数。如果还有其他问题,请随时提问。
球一个最佳答案谢谢啦!这对我非常重要!{:10_254:}{:10_254:}{:10_254:} 问题在于以下几个地方:
1. 在for循环中,判断条件应该是 num2<AA ,而不是 num2<=AA ,因为数组aa的下标范围是0到AA-1。
2. 在判断字符ch是否为换行符时,应该使用双等号 == 而不是赋值符号 = 。正确的判断条件应该是 ch == '\n' 。
3. 在将字符转换为对应的17进制数时,应该使用ASCII码表中'a'对应的数值97,而不是固定的97。正确的转换公式应该是 aa = ch - 'a' 。
4. 在计算17进制数转换为10进制数时,应该使用乘方运算符 ^ ,而不是按位异或运算符。正确的计算公式应该是 num1 = num1 + aa * pow(17, ii) 。
下面是修改后的代码:
#include <stdio.h>
#include <math.h>
#define AA 1024
int main()
{
int num1 = 0, num2, ii, pp;
char ch;
int aa;
for (num2 = 0; num2 < AA; num2++)
{
ch = getchar();
if (ch == '\n')
{
break;
}
else
{
aa = ch - 'a';
}
}
for (ii = 0, pp = num2; ii < num2 + 1; ii++, pp--)
{
num1 = num1 + aa * pow(17, ii);
}
printf("%d", num1);
return 0;
}
这样修改后的代码应该可以正确地将17进制数转换为10进制数。
页:
[1]