song_cin 2022-01-25 17:37 采纳率: 33.3%
浏览 14
已结题

c++十六进制转八进制,结果无法输出,直接就是按任意键继续

问题遇到的现象和发生背景

输入的第一行为一个正整数n (1<=n<=10)。
  接下来n行,每行一个由09、大写字母AF组成的字符串,表示要转换的十六进制正整数,每个十六进制数长度不超过100000。
输入的十六进制数不会有前导0,比如012A。
  输出的八进制数也不能有前导0。
我的想法:
单独写了个函数处理十六进制到十进制,成功了。
独独处理十进制到八进制无论我放到Main中还是单独写一个函数都有问题。不理解不理解,使用system("pause")等也不行。

#include<iostream>
#include<string.h>
#include<cmath>
using namespace std;
unsigned long long shiliu(char a[]){
    int length=strlen(a);
    unsigned long long sum=0;
    for(int i=length-1;i>=0;i--){
        int m=1;
        for(int j=0;j<length-i-1;j++)
                m=m*16;
        if(a[i]>='0'&&a[i]<='9')
            sum=sum+(a[i]-'0')*m;
        if(a[i]>='A'&&a[i]<='F')
            sum=sum+(a[i]-'A'+10)*m;
        }
    return sum;
}
int main(){
    long long sum;
    int n;
    cin>>n;
    int ba[1000000]={'\0'};
    char a[10][100000]={'\0'};
    for(int i=0;i<n;i++)
        cin>>a[i];
    for(int i=0;i<n;i++){
        cout<<shiliu(a[i]);
   int length=0;
    for(int j=0;j<1000000;j++){
        if(sum>0){
        ba[j]=sum%8;
        sum=sum/8;
        length++;}
        else
            break;
    }
    for(int l=length;l>=0;l--)
    cout<<ba[l]<<endl;
    }
    system("pause");
    return 0;}


运行结果及报错内容

直接就是按任意键继续
help!!

  • 写回答

1条回答 默认 最新

  • _GX_ 2022-01-25 18:44
    关注

    你这解法有问题,题目要求说明了输入十六进制数长度不超过100000,所以你用long long类型是存储不了那么大的数的,你得用大数法来解这道题

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 2月19日
  • 已采纳回答 2月11日
  • 创建了问题 1月25日

悬赏问题

  • ¥15 乘性高斯噪声在深度学习网络中的应用
  • ¥15 运筹学排序问题中的在线排序
  • ¥15 关于docker部署flink集成hadoop的yarn,请教个问题 flink启动yarn-session.sh连不上hadoop,这个整了好几天一直不行,求帮忙看一下怎么解决
  • ¥30 求一段fortran代码用IVF编译运行的结果
  • ¥15 深度学习根据CNN网络模型,搭建BP模型并训练MNIST数据集
  • ¥15 C++ 头文件/宏冲突问题解决
  • ¥15 用comsol模拟大气湍流通过底部加热(温度不同)的腔体
  • ¥50 安卓adb backup备份子用户应用数据失败
  • ¥20 有人能用聚类分析帮我分析一下文本内容嘛
  • ¥30 python代码,帮调试,帮帮忙吧