将字符串转换为数字的输出不符合预期

时间:2015-12-05 17:07:40

标签: java string

  

给定一个字符串作为输入,将其转换为它所代表的数字。您可以假设该字符串仅包含数字。它不会包含负数。不要使用Integer.parseInt来解决这个问题。

MyApproach

我将字符串转换为char数组并存储原始数字,但我无法将其转换为单个数字 我尝试转换单个元素,但数字可以是任意长度。因此,很难遵循这种方法。

提示:我提示可以使用位置值添加数字

例如,如果数字是2300.I我以数组的形式存储每个数字。然后它应该是2 * 1000 + 3 * 100 + 0 * 10 + 0 = 2300

但我无法将其转换为代码。

  

任何人都可以指导我怎么做吗?

注意我不能使用任何内置函数。

public int toNumber(String str)
{
   char ch1[]=str.toCharArray();
   int c[]=new int[ch1.length];
   int k=0;
   for(int i=0;i<c.length;i++)
   {
     if(ch1[i]==48) 
     {
        c[k++]=0;
     }
     else if(ch1[i]==49)
     {
        c[k++]=1;
     }
     else if(ch1[i]==50)
     {
        c[k++]=2;
     }
     else if(ch1[i]==51)
     {
        c[k++]=3;
     }
     else if(ch1[i]==52)
     {
        c[k++]=4;
     }
     else if(ch1[i]==53)
     {
        c[k++]=5;
     }
     else if(ch1[i]==54)
     {
        c[k++]=6;
     }
     else if(ch1[i]==55)
     {
        c[k++]=7;
     }
     else if(ch1[i]==56)
     {
        c[k++]=8;
     }
     else if(ch1[i]==57)
     {
        c[k++]=9;
     }

   }
 }

5 个答案:

答案 0 :(得分:4)

您无需执行权限或跟踪您的乘数。每次添加新数字时,只需将运行总数乘以10即可。并使用c - '0'将字符转换为数字:

int n = 0;
for (int i = 0; i < str.length(); i++) {
    n = n * 10 + str.charAt(i) - '0';
}

所以例如1234就是

0 * 10   + 1 = 1
1 * 10   + 2 = 12
12 * 10  + 3 = 123
123 * 10 + 4 = 1234

答案 1 :(得分:3)

数字字符'0' - '9')可以转换为整数值(0 - 9),使用:

ch - '0'

这是因为数字字符在ASCII / Unicode中都是连续的。

至于计算完整数字,对于输入2300,您不想要:

2 * 1000 + 3 * 100 + 0 * 10 + 0

相反,您需要使用循环的更多增量方法:

r = 0
r = r * 10 + 2   (2)
r = r * 10 + 3   (23)
r = r * 10 + 0   (230)
r = r * 10 + 0   (2300)

这比尝试计算您的公式所需的1000Math.pow(10,3))要好得多。

这应该是您编写代码的足够信息。如果没有,请创建一个新问题。

答案 2 :(得分:1)

如果循环遍历char数组并取最后一个值,则将其放入if语句并添加到数字整数(无论该数字是多少)(使用10 if语句)。接下来转到第二个到最后一个值,并且在将此结果数字乘以10之前将其相同,然后将其添加到总数中。使用1 * 10 ^(远离结束的值)乘以从if语句中获得的数字重复此操作。

答案 3 :(得分:1)

在看到这个问题时,我想到的是将您获得的数字乘以当前代码与charArray中的数字相乘:

int desiredNumber = 0;
for(int k=1; k<=c.length; k++) {
    desiredNumber += c[k] * (Math.pow(10, c.length - k));
}

如果不允许使用Math.pow()函数,那么只需在循环的帮助下编写一个。

Greetings Raven

答案 4 :(得分:-1)

你可以做到

int no = 0;
for(int i = 0; i < c.length; i++){
    no += c[i] * Math.pow(10, c.length - 1 - i);
}