我想使用此代码打印输入中的所有零。 例如:
input: 10000 -------------- output: 0000
但我明白了:
input: 10000 -------------- output: 0
这是C99
中的源代码:
#include<stdio.h>
int main() {
int co = 0, inputNumber, i, j, prod = 1, number = 0, ten = 10, newValue;
int numberOfInputs;
scanf("%d", &numberOfInputs);
for(i = 1; i <= numberOfInputs; i++) {
scanf("%d", &inputNumber);
for(j = 1; j < inputNumber; j++) {
if(inputNumber % j == 0) {
prod = prod * j;
}
}
if(prod < 10000)
printf("%d", prod);
else {
newValue = prod;
while((int)prod / 10 != 0) {
prod = (int) prod/10;
co++;
number = newValue % ten;
ten *= 10;
if(co == 4) {
printf("%d \n", number);
break;
}
}
}
}
return 0;
}
请帮助一些人:)
答案 0 :(得分:1)
使用完全不同的方法,您可以这样做:
String prevId = null;
StringBuilder sql = new StringBuilder();
while (rs.next()) {
String id = rs.getString("id");
String data = rs.getString("data");
if (id.equals(prevId)) {
sql.append(" or ");
} else {
if (prevId != null)
sql.append(" union ");
sql.append("select *, '")
.append(id) // may need to SQL escape value
.append("' as id from table_x where ");
prevId = id;
}
sql.append(data);
}
这段代码的作用是嗅探你输入的字符数组,并计算0个字符。然后它可以根据需要打印它们。不需要分裂和变速诡计。
答案 1 :(得分:1)
所以基本上,你想打印出带有前导零的产品的四个最低位数字,这非常简单:
printf( "%04d\n", prod % 10000 );
清理和重新格式化代码有点基本上简化为:
#include <stdio.h>
int main( void )
{
int inputNumber, i, j, prod=1;
int numberOfInputs;
scanf( "%d", &numberOfInputs );
for(i = 1; i <= numberOfInputs; i++ )
{
scanf("%d", &inputNumber);
for(j = 1; j < inputNumber; j++ )
{
if( inputNumber % j == 0)
{
prod = prod*j;
}
}
printf( "%04d\n", prod % 10000 );
}
return 0;
}
答案 2 :(得分:1)
目前的问题是,由于溢出,prod
结束为0.而0 < 10000
只需通过单一打印:if(prod<10000)printf("%d",prod);
只是绕过所有复杂的打印码。
事实上,它至少溢出(至负值)至少为84的值。
但这不是全部。即使prod
没有溢出,您也会计算number
中最多4位数的数字,但如果采用%d
格式则会打印。如果number小于1000,则不会使用该格式打印最高订单0,但您应使用%04d
。
这是一个最低限度修复的版本:
int main(){
int co=0,inputNumber,i,j,prod=1,number=0,ten=10,newValue;
int numberOfInputs;
scanf("%d",&numberOfInputs);
for(i=1;i<=numberOfInputs;i++)
{
scanf("%d",&inputNumber);
prod = 1; /* reset prod */
for(j=1;j<inputNumber;j++) {
if(inputNumber%j==0) {
prod = prod*j;
if (prod <= 0) {
break;
}
}
}
if (prod <=0) {
printf("Overflow\n");
}
else if(prod<10000) {
printf("%04d\n",prod);
}
else
{
newValue = prod;
while((int)prod/10 != 0)
{
prod = (int)prod/10;
co++;
number = newValue%ten;
ten*=10;
if(co==4)
{
printf("%04d \n",number);
break;
}
}
}
}
return 0;
}
但实际上else
部分应该是:
else
{
printf("%04d \n",prod % 10000);
}