给定一个字符串作为输入,将其转换为它所代表的数字。您可以假设该字符串仅包含数字。它不会包含负数。不要使用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;
}
}
}
答案 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)
这比尝试计算您的公式所需的1000
(Math.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);
}