2 qq 20254167 qq_20254167 于 2016.04.01 11:19 提问

输入为“任意进制+数值”,想输出十进制下该数的数值,但怎么也输出不对,求解答!

int main()
{
int i=0,j,k,s=0,d=0,n=0;
int q=1;
int a,b;
char str1[100];
char str2[100];
int num[100];
cin>>i;
gets(str1);
k=strlen(str1)-2;

while(k>=0)
{  
  a=getnum(str1[k]);
  a=a*q;
  s=s+a;
  q=q*i;
  k--;
 }
cout<<s<<endl;
//其中getnum()函数是我自己写的,功能是将字符型转化为int型,这个函数我测试过,没问题。例如‘a’->10,  'z'->35
//进制数为整型,数值为字符串(‘0’~‘9’表示0~9,‘a’~'z'表示10~35),进制数输入范围为2~35

1个回答

qq423399099
qq423399099   Ds   Rxr 2016.04.01 12:52
已采纳

有两个问题:
1.没有情况输入缓冲区
2.k=strlen(str1)-1才对,strlen是不计算'\0'的
我在代码里注释了以下两处

 #include<iostream>
using namespace std;
int getnum(char ch)
{
    int c = ch;
    if(ch >= 'a')
        return c - 87;
    else if(ch >= 'A')
        return c - 55;
    else
        return c - 48;
}

void main(int argc, char* argv[])
{
    int i=0,j,k,s=0,d=0,n=0;
    int q=1;
    int a,b;
    char str1[100];
    char str2[100];
    int num[100];
    cin>>i;
    fflush(stdin);//这里需要清空输入缓冲区,不然gets会直接读取遗留下来的回车
    gets(str1);
    k=strlen(str1)-1;//这里应该减1啊,为啥要减2?
    while(k>=0)
    {  
        a=getnum(str1[k]);
        a=a*q;
        s=s+a;
        q=q*i;
        k--;
    }
    cout << s << endl;
    system("pause");
}

图片说明

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
写出一个程序,接受一个十六进制的数值字符串,输出该数值的十进制字符串。(多组同时输入 )
import java.util.Scanner; public class Inputmany { public static void main(String[] args) { // TODO Auto-generated method stub Scanner scanner = new Scanner(System.in); while (scanner.hasNext
输入一个十进制数 转换成 八进制数输出(java源码)
对于输入的任意一个非负十进制整数,打印输出与其等值的八进制数。java代码实现源码。
C语言从键盘输入一个十进制数将其转换为任意进制数输出
将十进制数n转换为r进制数的方法是,n除以r取余数作为转换后的数的最低位。若商不为0,则商继续除以r,取余数做最低位,直到商为0为止。 其中,对于16进制大于9的六个数用A、B、C、D、E、F表示。将所得余数序列转换成字符保存在字符数组中。字符‘0’的ASCⅡ码是48,故余数0~9只要加上48就变成字符‘0’~‘9’;余数中大于9的数10~15要转换成字母,加上55就转化成'A'、'B'、'C'、'D
将一个任意输入的10进制数转化为16进制形式输出
//将一个任意输入的10进制数转化为16进制形式输出 #include #define MAXSIZE 11 void ten20x(unsigned int a,char *p) {     int i;     int j = 2;     int sum = 0;     int count = 0;     unsigned int mask = 0x80000000
编程实现将10进制数字转换为16进制数字,要求从键盘输入十进制数字输出对应的二进制数字,例如输入255,输出FF。(参考代码)
#include void main() {     int iTen2Sixt,iRTen2Sixt = 0,iTmp = 0,iCount = 0;     printf("Please input the decimal nummber:\n");     scanf("%d",&iTen2Sixt);       //逆序iTen2Sixt     while (iTen
对于输入的任意一个非负十进制整数,打印输出与其等值的八进制数
#include"stdio.h" #include"stdlib.h" #define OVERFLOW 0 #define OK 1 #define TRUE 1 #define FALSE 0 #define ERROR 0 #define STACK_INIT_SIZE 10 #define STACKINCREMENT 2 typedef int SElemType; typede
请编写一个C函数,该函数可以实现将一个整数转为任意进制的字符串输出
include #include #define N 10 void strRev(char *s) { char temp; char *end = s + strlen(s) - 1; while (end > s) { temp = *s; *s = *end; *end = temp; --end; ++s; } } void sixteen(char
java实现输入一个整数,将其转换成八进制数输出。
java实现输入一个整数,将其转换成八进制数输出。
用C语言代码实现n进制数转换为十进制数
用C语言代码实现n进制数转换为十进制数 为了实现进制之间的相互转化,编程实现输入任意一个数并输入该数的进制,然后将其转换为10进制并输出。 主要思路是将输入的数存入一个一维数组中然后进行相应处理。 #include #include #include int main(void) { long t1; int i, n, t, t3; char a[100]; print
接收一个十六进制的数值字符串,输出该数值的十进制字符串。
package oj.test; import java.util.Scanner; /*  * 写出一个程序,接收一个十六进制的数值字符串,输出该数值的十进制字符串。  * */ public class Demo3aa {  public static void main(String[] args) {   Scanner sc = new Scanner(System.i