这样的问题应该如何解决?
要求输入一个Number,要求输出它的even和odd。例如:输入“27473840”输出则是“14840” 和 “773”
请写一下解题思路,和程序。
问题点数:60、回复次数:9Top
1 楼superpig(黄飞鸿)回复于 2003-03-01 04:37:33 得分 0
convert to a String, then check each charTop
2 楼wkrain(戈壁一沙鸥)回复于 2003-03-01 18:18:06 得分 0
convert to a String, then check each char
Top
3 楼firemica(熊熊||╭∩╮(︶︿︶)╭∩╮)回复于 2003-03-02 00:45:20 得分 5
应该是:输入“27473840”输出则是“24840” 和 “773”
1.convert to a int array.
2.int a=int[0]......int[length]
3.用取模mod计算一下就可以了。Top
4 楼datapub(blueidea)回复于 2003-03-02 10:54:19 得分 5
这各问题要分两部:
第一部:将"27473840"中的各个数字取出,有两种方法:
1。通过除以10的i次方,取得整数部分即可
2。先将"27473840"转换成字符串,取出各个字符,再转换成整数
第二部:判断奇偶
将第一部取得的各个数字,除以2看余数是1,还是0即可Top
5 楼shine333(enihs)回复于 2003-03-02 14:09:24 得分 10
String input="27473840"; //or created in other ways.
StringBuffer[] buf={new StringBuffer(),new StringBuffer()};
for(int i=0;i<input.length();i++){
char c=input.charAt(i);
buf[(c-'0')%2].append(c);
}
String s1=buf[0].toString();
String s2=buf[1].toString();
Top
6 楼adot111(安定)回复于 2003-03-02 18:26:46 得分 0
请问,怎么除以10的i次方呢?Top
7 楼relive(六道轮回,无想转生)回复于 2003-03-03 16:39:30 得分 15
因为接收的一般是字符串或byte[],所以可以认为原始数据类型是String(byte[]用new String(byte[]),非String的用.toString().trim())
最容易理解的方案:挨个判断奇偶性
String input = "27473840";
String even = "";
String odd = "";
for (int i = 0; i < input.length(); i++)
{
int n = new Integer(input.substring(i, i + 1)).intValue();
if (n % 2 == 0)
even = even + n;
else
odd = odd + n;
}
该方案的变通方案:shine333(shine)的方式,用两个元素的String[]存储结果,元素0放偶数,元素1放奇数
String input = "27473840";
StringBuffer[] buf = { new StringBuffer(), new StringBuffer()};
for (int i = 0; i < input.length(); i++)
{
char c = input.charAt(i);
buf[(c - '0') % 2].append(c);//这里借用c - '0'==new Integer(String.valueOf(c)).intValue()的结果,所以把偶数放入元素0中,奇数放入元素1
}
String even = buf[0].toString();
String odd = buf[1].toString();
当然,还有一些其他办法,就不多说了。
10的i次幂:Math.pow(10, i)这是数学函数里自带的。
另,对于int类型,你是不是准备用10的i次幂啊?其实没必要。
int input = 27473840;
StringBuffer evenB = new StringBuffer();
StringBuffer oddB = new StringBuffer();
for (; input > 0; input = input / 10)
{
if (input % 2 == 0)
evenB.append(input % 10);
else
oddB.append(input % 10);
}
String even = evenB.reverse().toString();
String odd = oddB.reverse().toString();
Top
8 楼bluesmile979(笑着)回复于 2003-03-03 17:04:38 得分 15
你好,收到你的短信
首先你要保证你的输入都是数字,这个我就不加判断了。其他下面代码通过测试。另,搂住自己也试着写一写吧,总要锻炼的啊。我都认识你了,呵呵。
class hehe
{
public static void main(String[] args)
{
String str = "127473840";
byte[] by = str.getBytes();
StringBuffer sb1 = new StringBuffer();
StringBuffer sb2 = new StringBuffer();
for(int i = 0; i < by.length; i++ ){
System.out.println(by[i]);
if( by[ i ] == 49 ){
sb1.append( 1 );
}else if( ( by[ i ] % 2 ) == 0 ){
sb1.append( ( by[ i ] - 48 ) );
}else{
sb2.append( by[ i ] - 48 );
}
}
String even = sb1.toString();
String odd = sb2.toString();
System.out.println( even );
System.out.println( odd );
}
}Top
9 楼telenths(_非法操作_)回复于 2003-03-05 14:38:37 得分 10
我也收到了你的短信
是呀 这些都是数学上的问题
数学上过关了 用语言实现起来很简单的
大家都说得不错 我就不多说了
对 2 取 mod 是判断奇偶数的简单方法
shine333(shine) 的方法很好 简洁明了Top




