如何在 C 中打印全零?
How to print All zeros in C?
我想使用这段代码打印输入中的所有零。
例如:
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;
}
请大家帮忙:)
使用完全不同的方法,您可以这样做:
#include<stdio.h>
int main(){
int zeroCounter=0;
char inputNumber[256];
printf("Please enter the numerical value:");
fgets(inputNumber,256, stdin);
int j;
for(j=0; inputNumber[j]!='\n'; j++)
{
if(inputNumber[j]=='0') zeroCounter++;
}
printf("this value had %d zeros, here they are: ",zeroCounter);
while(zeroCounter!=0)
{
printf("0");
zeroCounter--;
}
printf("\n");
return 0;
}
此代码的作用是嗅探您输入的字符数组,并对 0 个字符进行计数。然后它可以根据需要打印它们。不需要除法和位移位恶作剧。
所以基本上,您想要打印出带前导零的产品的最低四位数字,这非常简单:
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;
}
那么你目前的问题是,由于溢出,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);
}
我想使用这段代码打印输入中的所有零。 例如:
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;
}
请大家帮忙:)
使用完全不同的方法,您可以这样做:
#include<stdio.h>
int main(){
int zeroCounter=0;
char inputNumber[256];
printf("Please enter the numerical value:");
fgets(inputNumber,256, stdin);
int j;
for(j=0; inputNumber[j]!='\n'; j++)
{
if(inputNumber[j]=='0') zeroCounter++;
}
printf("this value had %d zeros, here they are: ",zeroCounter);
while(zeroCounter!=0)
{
printf("0");
zeroCounter--;
}
printf("\n");
return 0;
}
此代码的作用是嗅探您输入的字符数组,并对 0 个字符进行计数。然后它可以根据需要打印它们。不需要除法和位移位恶作剧。
所以基本上,您想要打印出带前导零的产品的最低四位数字,这非常简单:
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;
}
那么你目前的问题是,由于溢出,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);
}