「已注销」 2019-09-27 00:03 采纳率: 25%
浏览 192
已采纳

想把一个十进制改成别的进制的数,但就是运行不成功,问题在哪里???跪求!各位爸爸!


#include<iostream>
#include<vector>
#include<algorithm>
#include<cmath>
using namespace std;
void print(int num, int base);
long powed(int base,int n);
main()
{
    int x = 20;
    int y = 8;
    print(x,y);
}


void print(int num, int base)
{
    int fine = 0;
    int counter = 0;
    cout << "Now decimal system is " << num << endl;
    vector<int>arr;
    int fin = 0;
    while(num!=0)
    {
        fine = num%base;
        num = num/base;
        arr[counter] = fine;
        counter++;
    }
    for(size_t i=counter-1;i>=0;i--)
        fin += powed(base,i)*arr[i];
    cout << fin;
}
long powed(int base,int n)
{
    long sum = 1;
    for(size_t i=0;i<n;i++)
        sum = sum * base;
    return sum;
}


  • 写回答

1条回答 默认 最新

  • 豆丷 2019-09-27 09:57
    关注

    1.vector使用不当,vectorarr;,这一句没有指定arr的大小,所以默认是0,后面用[]访问的时候就越界了,
    由于预先不能确定转换后的位数,所以改成pushback(),
    while循环执行完后arr数组里就是转换后的数,但是是逆序的,需要从后往前cout,
    2.powed函数不知道要干什么,是个死循环,也会导致越界

    
    void print(int num, int base);
    int main()
    {
        int x = 20;
        int y = 8;
        print(x, y);
        return 0;
    }
    
    
    void print(int num, int base)
    {
        int fine = 0;
        int counter = 0;
        cout << "Now decimal system is " << num << endl;
        vector<int>arr;
        int fin = 0;
        while (num != 0)
        {
            fine = num%base;
            num = num / base;
            arr.push_back(fine);
        }
        for (int i = arr.size() - 1; i >= 0; --i)
            cout << arr[i];
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 对于相关问题的求解与代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 信号傅里叶变换在matlab上遇到的小问题请求帮助
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料
  • ¥15 使用R语言marginaleffects包进行边际效应图绘制