這道題是等引數列,題目要求輸入的資料保證<=10的6次方,所以想到用long long。之前用的下面那種方法但是沒有通過,


后來猜想的可能是第24排(求sum那一排)不能將int型資料和long long型直接計算,然后改成上面的代碼(注釋了的)就通過了,但是不是很懂原理。

想問下int型資料直接和浮點數計算會有強制轉換,,但是不是long long型資料只能和long long計算??
求大佬講解,謝謝!!!
uj5u.com熱心網友回復:
電腦是多少位的?不是16位的話int 就夠了
uj5u.com熱心網友回復:
64位,但是我用int交上去洛谷通不過,我想的首項和第二項和項數都是<=10^6,最后的結果可能比較大嘛就用的long long,只是不是很懂long long 是不是不能和int計算
uj5u.com熱心網友回復:
正常來說可以呀都是整形
uj5u.com熱心網友回復:
我也不知道為什么..比如剛剛我輸入45454 789789 45454,用下面的代碼就是亂碼,用上面的代碼就能算出來,是不是會丟失資料什么的...跟float double一樣??
uj5u.com熱心網友回復:
大概變數溢位了int,被截斷保存到sum,所以資料不對吧。sum=(int64)(xxxx);
uj5u.com熱心網友回復:
45454 789789 45454這三個數
算出a[2]越界了(a[2]是int)
uj5u.com熱心網友回復:
(int64)a[0] 類似的也強轉uj5u.com熱心網友回復:
#include <stdio.h>int main()
{
long long int a,b,n,d;
long long int sum;
scanf("%lld%lld%lld",&a,&b,&n);
d=b-a;
sum=n*a+n*(n-1)*d/2;
printf("%lld\n",sum);
return 0;
}
可以這樣,搞他一手
uj5u.com熱心網友回復:
感覺你的問題出在a[2]的計算上了a[2]=(a[1]-a[0])*(n-1)+a[0];
a[2]是int容易越界
你可以把陣列換成3個數
把a【2】對應的用long long
a[0],a[1]用int
驗證一下
uj5u.com熱心網友回復:
全是long long 就是對的,在洛谷上通過了
uj5u.com熱心網友回復:
是的!!我才懂了這個!!
我是另外設了個long long temp,temp作為末項,想問下sum=(temp+a[0])*n/2;這樣做是會自動把a[0]轉換成long long 嗎,還是因為a[0]比較小不會資料缺失,反正我這樣做是通過了的
uj5u.com熱心網友回復:
應該是低轉高吧int->long long
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/110153.html
標籤:新手樂園
上一篇:如何只得到一個結果
下一篇:c語言
