在C中编写一个程序,它将取一个基数和n位数,并输出一个由这些数字

时间:2016-12-26 14:48:41

标签: c base

我必须在C中编写一个程序,该程序将从用户那里获取基数b(假设b在2到10之间),自然数n然后是n个数字代表基数m中某个数字b的数字。程序应打印出输入的十进制数m。例如,如果您添加b=5n=4,然后添加数字3421,则程序应输出{{ 1}}因为486

注意:您可以假设数字是m=3*5^3+4*5^2+2*5^1+1*5^0=4860之间的数字。

所以这就是我所做的:

b-1

你能告诉我为什么这对上面例子中给出的数字不起作用吗?它会输出#include<stdio.h> #include<math.h> int main(void) { int x,n,b,k=0,num=0,i,j; scanf("%d", &b); scanf("%d", &n); for(i=1; i<=n; i++) { scanf("%d", &x); for(j=1; j<b; j++){ if(j>k){ num=num+x*(pow(b,n-j)); k=j; break; } } } printf("m=%d", num); return 0; } 而不是485,而如果我以486为例,然后是数字b=7, n=35, 6,我会得到正确的解1 }。

3 个答案:

答案 0 :(得分:2)

我建议检查scanf()的返回值,这样的事情是正确的想法:

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int
main(int argc, char *argv[]) {
    int base, n, i, x, sum = 0, power;

    printf("Enter base: ");
    if (scanf("%d", &base) != 1) {
        printf("Invalid base.\n");
        exit(EXIT_FAILURE);
    }

    printf("Enter n: ");
    if (scanf("%d", &n) != 1) {
        printf("Invalid n.\n");
        exit(EXIT_FAILURE);
    }

    power = n-1;

    printf("Enter numbers: ");
    for (i = 0; i < n; i++) {
        if (scanf("%d", &x) != 1) {
            printf("Invalid value.\n");
            exit(EXIT_FAILURE);
        }
        sum += x * pow(base, power);
        power--;
    }

    printf("Sum = %d\n", sum);

    return 0;
}

输入:

Enter base: 5
Enter n: 4
Enter numbers: 3 4 2 1

输出:

Sum = 486

答案 1 :(得分:1)

您需要对逻辑进行一些小改动。

#include <stdio.h>
#include <math.h>

int main(void) {
    int x, n, b,  num = 0, i;
    scanf("%d", &b);
    scanf("%d", &n);
    for (i = 1; i <= n; i++) {
        scanf("%d", &x);
        num += x * pow(b, n - i);
    }
    printf("m=%d", num);
    return 0;
}

测试

gcc -Wall main.c -lm
$ ./a.out
5
4
3
4
2
1
m=486  

测试2

 ./a.out
7
3
5
6
1
m=288                                                         

答案 2 :(得分:0)

好的,所以给定二进制数,我们可以非常容易地输出十进制数。只需printf(&#34;%d%\ n&#34;,x);

接下来的工作是将给定数字和基数转换为二进制(机器表示)数字。

  int basetointeger(const char *digits, int b)
  {
      assert(b >= 2 && b <= 10);
      // code here

      return answer;
  }

现在把它全部挂到主

int main(void)
{
     int x;
     int base;
     char digits[64];  // give more digits than we need, we're not worrying about oveflow yet
     /* enter base *?
     code here
     /* enter digits */
     code here
     x = basetointger(digits, base);
     printf("Number in decimal is %d\n, x);
}