|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
问题
- 请写一段程序将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[AA];
-
- for( (ch=getchar()),num2=0 ;num2<AA; num2++ )
- {
- if(ch = '\n')
- {
- break;
- }
- else
- {
- aa[num2] = int(ch) - 97;
- }
- }
-
- for( ii=0,pp=num2 ;ii<num2+1; ii++,pp-- )
- {
- num1 = num1 + aa[pp]*(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[AA];
- int length = 0;
- for (ch = getchar(), num2 = 0; num2 < AA; num2++) {
- if (ch == '\n') {
- break;
- } else {
- aa[num2] = ch - 'a';
- length++;
- }
- ch = getchar();
- }
- for (ii = 0, pp = length - 1; ii < length; ii++, pp--) {
- num1 += aa[pp] * pow(17, ii);
- }
- printf("%d", num1);
- return 0;
- }
复制代码
这样,您的代码应该能够正确将17进制数转换为10进制数。如果还有其他问题,请随时提问。
球一个最佳答案谢谢啦!这对我非常重要!  
|
|