神明18号 2023-12-01 13:14 采纳率: 66.7%
浏览 5
已结题

c++的问题123456789

问题 E: 贝贝的数学课
题目描述

贝贝很喜欢上数学课,因为他觉得数学课可以带给他很多乐趣,不会像其它科目那样显得沉闷,一天,数学为了提高学生的学习兴趣,便出了一道有趣的数学题目:

首先,他把全班分成k个小组,游戏开始前,会把三个数据n,t,m写在黑板上,他要求把一个n进制的数t,转换成m进制数。哪个小组最快算出这个m进制数,将会得到奖品,奖品会分发给小组的每个同学。

请你编一程序,帮助贝贝所在小组获胜。

【输入格式】

输入数据共有三行,第一行是一个正整数,表示需要转换的数的进制n(2≤n≤16),第二行是一个n进制数,若n>10则用大写字母A~F表示数码10~15,并且该n进制数对应的十进制数的值不超过2000000000,第三行也是一个正整数,表示转换之后的数的进制m(2≤m≤16)。

【输出格式】

输出仅一行,包含一个正整数,表示转换之后的m进制数。

【输入样例】

16

FF

2

【输出样例】

11111111

我的代码:

#include<bits/stdc++.h>
using namespace std;
int f(int jk,int p){
    if(p==0) return 1;
    int q=1;
    for(int i=1;i<=p;i++){
        q=q*jk;
    }return q;
}
string ch;
int n,s,u,h;
int l;
int k[114514];
int a[114514];
int main(){
    cin>>n>>ch>>s;
    l=ch.size();
    if(n==s){
        cout<<ch;
        return 0;
    }
    for(int i=0;i<l;i++){
    if(n>10) k[i]=int(ch[i]-'A'+10);
    else k[i]=int(ch[i]-'0');
    }for(int i=0;i<l;i++){
        u+=k[i]*f(n,i);
    }if(s==10){
        cout<<u;
        return 0;
    }
    for(int i=u;i!=0;i/=s){
        h++;
    a[h]=u%s;   
    }for(int i=h;i>=1;i--){
        cout<<a[h];
    }
    return 0;
}

请求各位c++人士指出我的代码错误(系统一直说我答案错误)!

  • 写回答

2条回答 默认 最新

  • 柯本 2023-12-01 13:58
    关注

    程序至少有个错

    
     a[h]=u%s;   
    应该是
     a[h]=i%s;   
    

    另外,转换后的数制输出蛤没考虑>10的情况

    在你基础改好的参考:

    #include <bits/stdc++.h>
    using namespace std;
    int f(int jk, int p)
    {
      if (p == 0)
        return 1;
      int q = 1;
      for (int i = 1; i <= p; i++)
        {
          q = q * jk;
        }
      return q;
    }
    string ch;
    int n, s, u, h;
    int l;
    int k[114514];
    int a[114514];
    int main()
    {
      cin >> n >> ch >> s;
      l = ch.size();
      if (n == s)
        {
          cout << ch;
          return 0;
        }
      for (int i = 0; i < l; i++)
        {
          if (n > 10 && ch[i] >='A') ///here 
            k[i] = int(ch[i] - 'A' + 10);
          else
            k[i] = int(ch[i] - '0');
        }
      for (int i = 0; i < l; i++)
        {
           u += k[i] * f(n, l-i-1); ////here 
        }
      if (s == 10)
        {
          cout << u;
          return 0;
        }
      for (int i = u; i != 0; i /= s)
        {
          h++;
          a[h] = i % s;
        }
      for (int i = h; i >= 1; i--)
        {
          if (a[i]>10) //here
            cout << (char)('A'+a[i]-10); //here 
            else
          cout << a[i]; //here
        }
      return 0;
    }
    
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 12月12日
  • 已采纳回答 12月4日
  • 创建了问题 12月1日

悬赏问题

  • ¥66 关于川崎机器人调速问题
  • ¥15 winFrom界面无法打开
  • ¥15 crossover21 ARM64版本安装软件问题
  • ¥15 mymetaobjecthandler没有进入
  • ¥15 mmo能不能做客户端怪物
  • ¥15 osm下载到arcgis出错
  • ¥15 Dell g15 每次打开eiq portal后3分钟内自动退出
  • ¥200 使用python编写程序,采用socket方式获取网页实时刷新的数据,能定时print()出来就行。
  • ¥15 matlab如何根据图片中的公式绘制e和v的曲线图
  • ¥15 我想用Python(Django)+Vue搭建一个用户登录界面,但是在运行npm run serve时报错了如何解决?