2015-10-31 177 views
-1

我试图将我的程序从int转换为long long,但返回参数似乎有问题,因为XCode说int和long long之间的隐式转换的一些情况..从int转换为long long

#include <iostream> 

using namespace std; 

int potenzieren(long long basis, long long exponent) 
{ 
    long long ergebnis = 1; 
    for (int i=0; i<exponent; i = i+1) 
    { 
     ergebnis = ergebnis*basis; 
    } 
    cout << basis << " hoch " << exponent << " = " << ergebnis << "\r"; 
    return ergebnis; 
} 

int main() 
{ 
    cout << "Programm zum Potenzieren.\r"; 
    long long a=0; 
    long long b=0; 
    cout << "Basis?:"; 
    cin >> a; 
    cout << "Exponent?: "; 
    cin >> b; 

    potenzieren(a,b); 
} 

感谢您的任何帮助。

+1

'double double'?当然,你的意思是“长久”,不是吗? – Cornstalks

+0

函数的返回类型是int。改变它很长。或者双倍。您可能必须明确投射。 –

+0

是的,我很久很久。 – Lukas

回答

3

将以下函数的返回类型更改为long long。你得到这个错误的原因是返回类型从long long到int的隐式转换,在'potenzieren'函数中会返回数据丢失。

也请修复“我”是很长很长(否则你的循环,如果指数超过INT的范围可能永远不会结束)

long long potenzieren(long long basis, long long exponent) 
{ 
    long long ergebnis = 1; 
    for (long long i=0; i<exponent; i = i+1) 
    { 
     ergebnis = ergebnis*basis; 
    } 
    cout << basis << " hoch " << exponent << " = " << ergebnis << "\r"; 
    return ergebnis; 
} 
3

此功能仍然会返回一个int

int potenzieren(long long basis, long long exponent) 
{ 
    long long ergebnis = 1; 
    for (int i=0; i<exponent; i = i+1) 
    { 
     ergebnis = ergebnis*basis; 
    } 
    cout << basis << " hoch " << exponent << " = " << ergebnis << "\r"; 
    return ergebnis; 
} 

如果您想要它返回long long您需要更改其返回类型:

long long potenzieren(long long basis, long long exponent) 
{ 
    long long ergebnis = 1; 
    for (int i=0; i<exponent; i = i+1) 
    { 
     ergebnis = ergebnis*basis; 
    } 
    cout << basis << " hoch " << exponent << " = " << ergebnis << "\r"; 
    return ergebnis; 
} 
0

此外,如果你真的想返回int并且要确保它不会导致溢出,你可以简单地明确将您long longint这样:

return static_cast<int>(ergebnis); 

这样编译器会知道这是你想要的,不应该再警告你了。