2

我正在尝试编写一个八进制到十进制转换的应用程序。

问题是返回值比应有的值小 1,例如:

输入:2426(十月)

应该返回:1302(十二月)

回报:1301(十二月)

有什么想法有什么问题吗?如果有人想知道,我正在使用最新的 Code::Blocks。

这是我的代码:

int oct2dec (int number) {
    int system  = 8;
    int length  = IntegerLength(number);
    int power   = length - 1;
    int result  = 0;
    int partial = 0;

    do {
        partial = part_nr(number);
        cout<<"czastka: "<<partial<<endl;
        result = result + (partial * pow(system,power));
        number = number - (partial * pow(10,power));
        power--;

    } while (number>0);
    return result; 
}

part_nr 函数:

int part_nr(int number) {
    int multipler = 1;
    int result    = 0;
    do {
        int temp=number/multipler;
        if(temp<10) result = temp;
        multipler = multipler*10;
    } while (result == 0);
    return result;
}

整数长度函数:

int IntegerLength(int value) {
   int divisor = 10;
   int length  = 1;
   while(value >= divisor)
   {
     value = (value - (value % divisor)) / divisor;
     length ++;
   }

   return length;
}

(顺便说一句。我已经将变量从我的母语语言翻译成英语,所以如果你看到任何非英语变量这么说,我会更正它)

4

3 回答 3

1

我认为您的算法只是在四舍五入方面存在问题。无论如何,这不是进行转换的方法:在输入的过程中,您只需读取数字并将其添加到当前值。如果还有另一个数字,则乘以 8 并重复。

在出路时,您将除以 10 的余数(模数)形成下一个数字。然后除以 10,当结果非零时重复。

于 2012-10-08T18:49:06.587 回答
1

您可以比您尝试做的更容易做到这一点。例如:

unsigned int oct2dec(unsigned int oct) {
    int dec = 0, m = 1;

    while (oct > 0) {
        dec += m * (oct % 10);
        oct /= 10;
        m *= 8;
    }
    return dec;
}
于 2012-10-08T18:53:35.793 回答
0

我已经测试了您的代码,它正在输出您声称的预期值。我遇到的唯一问题是四舍五入。我将pow()函数调用更改为powf(),然后将该函数的结果转换为整数。

这是我测试的代码(VS2010 C++ 项目):

#include "stdafx.h"
#include <iostream>
#include <cmath>    
using namespace std;

int part_nr(int number) {
  int multipler = 1;
  int result    = 0;
  do {
    int temp=number/multipler;
    if(temp<10) result = temp;
    multipler = multipler*10;
  } while (result == 0);
  return result;
}


int IntegerLength(int value) {
   int divisor = 10;
   int length  = 1;
   while(value >= divisor)
   {
     value = (value - (value % divisor)) / divisor;
     length++;
   }
   return length;
}

int oct2dec (int number) {
  int system  = 8;
  int length  = IntegerLength(number);
  int power   = length - 1;
  int result  = 0;
  int partial = 0;

  do {
    partial = part_nr(number);
    cout<<"czastka: "<<partial<< endl;
    result = result + (partial * (int)powf(system,power));
    number = number - (partial * (int)powf(10,power));
    power--;

  } while (number>0);
  return result; 
}





int _tmain(int argc, _TCHAR* argv[])
{
  int res = oct2dec(2426);
  cout << "res is " << res << endl;
  getchar();
  return 0;
}
于 2012-10-08T18:47:55.793 回答