Code Bye

leetcode的问题:数组中除了某个数只出现一次外,其余的都出现了三次,求只出现一次的数字

#include<stdio.h>
int* DecToK(int num, int k)//十进制化为K进制,这里的k为3
{
int p[32] = { “0” };
int index = 0;
while (num)
{
p[index++] = num % k;
num = num / k;
}
return p;
}
int KToDec(int p[], int k)//k进制化为十进制
{
int L = sizeof(p) / (sizeof(int));
int index;
int num = 0;
for (index = L – 1; index >= 0; index–)
num = num*k + p[index];
return num;
}
int getSingle(int* nums, int numSize)//得到只出现一次的那个数
{
int* p;
int singlenum;
int numsum[32] = { “0” };
for (int i = 0; i < numSize; i++)
{
p = DecToK(nums[i], 3);
for (int j = 0; j <= 31; j++)
numsum[j] = numsum[j] + p[j];
}
for (int j = 0; j <= 31; j++)
numsum[j] = numsum[j] % 3;
singlenum = KToDec(numsum, 3);
return singlenum;
}
int main(void)
{
int a[7];
int singleNum;
for (int i = 0; i < 7; i++)
scanf(“%d”, &a[i]);
singleNum = getSingle(a, 7);
printf(“%d”, singleNum);
getchar(); getchar();
return 0;
}
上面是本人用C编写的程序。整体逻辑可以过的,但是结果不对。本人的出错点可能是参数的传递问题(值传递还是址传递)。请高手帮看看。
解决方案

40

单步跟踪你的程序,看每一步计算结果与你期望的能否一致

40

KToDec函数里int L = sizeof(p) / (sizeof(int));这样用是不行的。
数组传参会退化成指针,32位机上,你sizeof(p)永远是4
代码功能归根结底不是别人帮本人看或讲解或注释出来的;而是被本人静下心来花足够长的时间和精力亲自动手单步或设断点或对执行到某步获得的中间结果显示或写到日志文件中一步一步分析出来的。
提醒:再牛×的老师也无法代替学生本人领悟和上厕所!
单步调试和设断点调试(VS IDE中编译连接通过以后,按F10或F11键单步执行,按Shift+F11退出当前函数;在某行按F9设断点后按F5执行停在该断点处。)是程序员必须掌握的技能之一。

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明leetcode的问题:数组中除了某个数只出现一次外,其余的都出现了三次,求只出现一次的数字