在下面的代码中,我试图计算给定int中不同奇数的数量。为此,我首先使用模数将整数分成单个数字的整数,然后将所有奇数放入数组oddInts中。这工作正常,但数组似乎只在if语句中保存值。在if语句之外,数组似乎有一堆随机数。
我的问题是,我如何修改if语句中的数组,以便之后可以操作数组。
#include <stdio.h>
#include <math.h>
int lenHelper(unsigned x) {
if(x>=1000000000) return 10;
if(x>=100000000) return 9;
if(x>=10000000) return 8;
if(x>=1000000) return 7;
if(x>=100000) return 6;
if(x>=10000) return 5;
if(x>=1000) return 4;
if(x>=100) return 3;
if(x>=10) return 2;
return 1;
}
int main(int argc, const char * argv[])
{
int inputInt=987654;
int size=lenHelper(inputInt);
int input[size];
int count=0;
// int oddCount=0;
int oddInts[5];
for (int i=0; i<size; i++) {
input[i]=inputInt%10;
inputInt=inputInt/10;
if (input[i]%2==1) {
// oddCount=input[i];
oddInts[i]=input[i];
printf("%d", oddInts[i]);
}
}
return 0;
}
答案 0 :(得分:1)
如果我已经正确理解,那么数组oddInts必须保持原始数字中每个奇数位的频率。如果是这样,那么代码可以采用以下方式
// preceding declarations
int main(int argc, const char * argv[])
{
unsigned int inputInt = 987654;
int size = lenHelper( inputInt );
unsigned int input[size];
unsigned int oddInts[5] = { 0 };
for ( int i = 0; i < size; i++ )
{
input[i] = inputInt % 10;
inputInt = inputInt / 10;
if ( input[i] % 2 == 1 )
{
int j = ( input[i] - 1 ) / 2;
oddInts[j]++;
printf( "%d\t%d", input[i], oddInts[j] );
}
}
return 0;
}
至于我,那么我会按照以下方式编写程序(使用C99之前的C)
#include <stdio.h>
#define BASE 10
int main( void )
{
while ( 1 )
{
unsigned int oddInts[BASE / 2] = { 0 };
unsigned int x = 0;
unsigned int i;
printf( "Enter a positive integer number (0 - exit): " );
scanf( "%u", &x );
if ( !x ) break;
do
{
unsigned int digit = x % BASE;
if ( digit % 2 == 1 ) oddInts[(digit - 1 ) / 2]++;
} while ( x /= BASE );
for ( i = 0; i < BASE / 2; i++ )
{
printf( "\n%u\t%u", 2 * i + 1, oddInts[i] );
}
puts( "" );
}
return 0;
}
如果输入是
1234576543
0
然后输出
Enter a positive integer number (0 - exit): 1234576543
1 1
3 2
5 2
7 1
9 0
Enter a positive integer number (0 - exit): 0
答案 1 :(得分:0)
现在,当数字不是奇数时,你什么都不做,所以数组中的这些元素可能包含垃圾,这就是你在那里有随机数的原因。 我添加了&#34;否则&#34;代码,以帮助您了解问题的原因。
for (int i=0; i<size; i++) {
input[i]=inputInt%10;
inputInt=inputInt/10;
if (input[i]%2==1) {
// oddCount=input[i];
oddInts[i]=input[i];
printf("%d ", oddInts[i]);
} else {
oddInts[i] = 0; //the digit is not odd
}
}
for (i=0; i<size; i++) {
printf("%d\n", oddInts[i]);
}
此外,您的代码不会计算不同的奇数。它只是用数字中的所有奇数位填充数组oddInts。 它不会对它们进行计数,也不会检查数字是否不同。
答案 2 :(得分:0)
int main(int argc, const char * argv[])
{
int value=0; //Newly added variable
for (int i=0; i<size; i++) {
input[i]=inputInt%10;
inputInt=inputInt/10;
if (input[i]%2==1) {
// oddCount=input[i];
oddInts[value]=input[i]; //oddInts[] is updated
printf("%d", oddInts[value]);//oddInts[value] is printed
value++; //'value' is incremented
}
}
return 0;
}
答案 3 :(得分:0)
#include<stdio.h>
#include <math.h>
int lenHelper(unsigned x) {
if(x>=1000000000) return 10;
if(x>=100000000) return 9;
if(x>=10000000) return 8;
if(x>=1000000) return 7;
if(x>=100000) return 6;
if(x>=10000) return 5;
if(x>=1000) return 4;
if(x>=100) return 3;
if(x>=10) return 2;
return 1;
}
int main(int argc, const char * argv[])
{
int inputInt=987654;
int size=lenHelper(inputInt);
int input[size];
int count=0,i,k=0;
/* int oddCount=0; */
int oddInts[5];
for ( i=0; i<size; i++)
{
input[i]=inputInt%10;
inputInt=inputInt/10;
if (input[i]%2==1)
{
// oddCount=input[i];
oddInts[k]=input[i];
k++;
}
}
for(i=0;i<k;i++)
{
printf("%d", oddInts[i]);
}
return 0;
}