永发信息网

简单的C语言问题,求秒杀

答案:7  悬赏:0  手机版
解决时间 2021-11-21 19:25
简单的C语言问题,求秒杀
最佳答案
请确认这个数:“它的位数小于等于一百万”,还是大小小于一百万?
如果是前者,有可能是大数,超了整数表示的范围
具体算法上,下面这段是没用的,直接拿x%9就可以得到结果,因为你前面x等于这个数字的各位数之和,那么这个数整除九之后的余数 就等于 这个数字的各位数之和整除9之后的余数,即x%9
while(x>=10)
{
temp=x;
x=0;
while(temp!=0)
{
x=x+temp%10;
temp=temp/10;
}
}追问这个删除后我有提交了一次,还是wrong answer
不过好像有点知道哪里错了==追答嗯,剩余就是输入输出的问题了,不难的,自己再琢磨下试试追问额,希望破灭了,我还以为是第一遍进行相加的时候long型数据承受不了那个值,(比如说有100万-1位的9进行求余)结果把你调出来的程序调入到第一个循环里,结果还是不对==追答我始终认为你的主要问题还是在输入输出上,对acm题最好不要getchar之类的,用scanf和printf。
另外用char一次性申请内存有助于降低程序复杂度,
修改后如下:
#include
int main(){
int num;
char ch[1000002];
scanf("%d",&num);
while(num--)
{
long x=0;
scanf("%s",ch);
char *p=ch;
while(*p)
{
x=*p-'0'+x;
p++;
}
printf("%ld\n",x%9);
}
return 0;
}
全部回答


能推荐几个群么?yy也可以啊追答在你的qq里面群搜索,关键字为“c语言”就行 ,自己找吧,很多的里面很多人还是愿意回答的。追问主要是不知道加哪个好,以前都加了好几个群,额。。。有点小失望,不然就是不让我进,不然就是那个那个的,,,,
我不挑三拣四。。。别误会,找不到好的群 》。《追答下午回来给你看吧!应该能够搞定。我也还没有加c语言群,先睡觉下午有课。
说得不清楚,数字小于1百万位?还是八位?最好举例子说明;还有就是家才语言群。高手很多;追问数字的位数小于100万位
打个比方
2347928349273423649283653287462374092813235445646576574747
求9的余数==
呃,是我理解错了!确实是各个位上的数相加结果整除9就可以了!
while(x>=10)
{...
}
去掉这个外面的循环就行了吧!直接求%9咯!追问

额。。。。。。。。

 

不行,long这个整数如果存储不了那个数据也会溢出的(假设全部都是8的一个那么长的数,加起来也不差那几位)

代码主要是第二次的代码,不过还是不通过

追答嗯,确实有这个结论!是我先搞错了- -!Sorry哈
借用楼主代码,先写个处理余数函数就行。另外设置一个数组用来存储每次输入的数求余后的结果,因为你要最后输出。当然用动态指针申请空间存储也行。
我认为最关键是要每次求和之后也进行求余,这样不至于太大超出int范围。
写完发现和 __angelfish| 说的差不多。只不过他一下子申请超大内存重复操作不太可取。

#include
#define N 100

int MOD(long num)
{
int result=0;
while(num)
{
result+=(num%10);
num/=10;
result%=9;
}
return result;
}
int main()
{
char ch;
int i=0,num;
long x;
int a[N];
scanf("%d",&num);
getchar();
while(num--)
{
x=0;
ch=getchar();
while(ch!='\n')
{
x=ch-'0'+x;
ch=getchar();
}
a[i]=MOD(x);
i++;
}
num=i;
for(i=0;i printf("%d\n",a[i]);
return 0;
}
追答1) char bigNumber 是全局变量,可以申请到那么大的。
2) 因为是全局变量,只会被分配一次。
3)为了保存最大的数字(100万位)必须这么大,不存在浪费的问题。
4)一般程序的内存限制 65535 KB,char bigNumber[1000002] 只占 976KB左右,不会超内存限制的。
5)我的程序不止可以计算和 9 取余数的问题,可以计算和【任意数字(int 范围内)】取余数的问题。
6)和 9 取余数的问题,可以等价于和各位数字和取余数的问题,我看了你的归纳证明法时对的。
因此可以对和 9 取余数的问题特别设计。如:
#include
int main(int argc, char *argv[])
{
int T;
char ch;
int remainder;
scanf("%d",&T);
fflush(stdin);
while(T--)
{
remainder = 0;
while((ch=getchar())!='\n')
{
remainder = (remainder + (ch-'0')) % 9;
}
printf("%d\n",remainder);
}
return 0;
}追问全局变量只申请一次,这个确定
虽然可以理论通过(代码看过了,不过没有提交哦),不过,我觉得还是不太好哦
第一,100w的空间首先来说过于庞大,虽按照你的说法能够申请和空间不溢出,但是毕竟现在程序都是寻求最优代码的(小,快,精)
第二,太慢,100w对于这个题目来说不是小数目啊

我们的思路其实一致的,运行时间大概相同
但我的一接受就进行转型和进行预算,最后得结果
不需要占用那么多的资源追答1)100w 字节还不到 1M,对现在的计算机来说不大的。
2)我说过了你的算法是针对特殊数据 9 的,而我的是针对任意数字的。你的程序有专对性,而我的有通用性。
3)你以后会碰到需要开辟这么大空间的题目的,相信我。
#include
char bigNumber[1000002];
int main(int argc, char *argv[])
{
// 数据总数
int T=0;
// mod 为除数,remainder 为当前的余数
int mod=9,remainder=0;
int i=0;
scanf("%d",&T);
while(T--)
{
scanf("%s",bigNumber);
for(i=0,remainder=0;bigNumber[i];i++)
{

remainder = (remainder*10 + (bigNumber[i]-'0')) % mod;
}
printf("%d\n",remainder);
}
return 0;
}追问嗯,我们的思路大概一样的,不过你的虽然直接
先说一声谢谢了
但是内存利用率不如我的哦,你的数组要占很大一部分空间,而且过大的空间编辑器也无法申请
如果内存超量同样也会出错,而且,最重要的是,输入的数有多有少,有大有小,如果全部都是那么大空间,浪费太严重

ps:你的编辑器通过你的代码?好像你哪个数组申请不来的吧==
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
台服4.0戒律,暗影 牧师属性和装备问题 台服高
iPhone6s16G升级11.3系统好用吗
93除以6的竖式怎么写
2014年9月东莞黄江和长安有没有禁止摩托车加
品相完好的光绪元宝湖北省造0.72能值多少钱?
War3不死族的速毁灭
关于节日的传说
十三省山里为什么缺粮呢,东北不是棒打狍子瓢
德国为什么没能打下英国
黄鹤楼是免费的吗
不能进行 外区转入 处理
蚂蚁借呗的利息是按日收取的,日利率区间为万
化隆回族自治县人民检察院地址在哪,我要去那
如何培养学生的自学能力郭丽红
属兔女四十二可不可以和属龙做情人呢,求解释?
推荐资讯
两性相爱是什么意思
摩托罗拉对讲机被锁着了怎么解锁型号xirp8260
为什么看了几本史书之后,感觉现在的中华已经
蓟州书画苑地址有知道的么?有点事想过去!
孩子遇到挫折心情会很沮丧怎么教育他
古诗中,律诗是八句诗。有—诗选集,其中五言
作为出口方,应尽量采用FCA、CPT、CIP方式?F
新股为什么都要十几二十的连板,开板后到底谁
开心果穿杯子
打篮球1小时消耗多少卡路里?
4个奥运圈圈是奥迪吗?多少钱
阜宁婚纱照哪家拍的好?
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?