Ich löste Quasi-Binary Problem (spielt keine Rolle) auf Codeforces und das ist meine submission. Dies ist der Code, den ich produziert haben:Code produziert verschiedene Ausgabe auf verschiedenen Compilern
#include <iostream>
#include <cmath>
using namespace std;
int quasi_binary(int num, int tens)
{
int res,digit;
if(num == 0)
{
return 0;
}
digit = num%10;
num = num/10;
res = quasi_binary(num, tens+1);
if(digit)
{
cout << 1;
return ((digit-1)*pow(10,tens)+res);
}
else
{
cout << 0;
return res;
}
}
int main()
{
int n,k=-1,temp,digit;
cin >> n;
//this loop calculates the value of k,as it needs to be printed first
temp=n;
while(temp)
{
digit = temp%10;
temp = temp/10;
if(digit>k)
k=digit;
}
cout << k << endl;
//print those k quasi-numbers
while(n)
{
n = quasi_binary(n,0);
cout << " ";
}
return 0;
}
Ich sehe keine Aussage, die nicht definiertes Verhalten auf verschiedenen Compilern produzieren kann. Ich habe auch richtige Klammern an den richtigen Stellen verwendet, um Zweideutigkeiten zu vermeiden. Immer noch undefiniertes Verhalten. Kann jemand bitte helfen, die Anweisung/Anweisung zu finden, die das undefinierte Verhalten erzeugt.
Eingang
415
Ausgang (online Richter) - falsche
5
111 101 101 11 11 11 11 11 11 11 11 11
Output (auf meinem 64-Bit-PC mit gcc) - korrekte
5
111 101 101 101 1
'pow (10, Zehner)' - Verwenden Sie keine 'pow' wenn Sie Integer-Exponenten haben. Es gibt [keine Garantie, dass pow Ihnen die richtigen Ergebnisse liefert] (http://stackoverflow.com/questions/25678481/why-pown-2-return-24-whenn-n-5/25678721#25678721). – PaulMcKenzie
Ich glaube nicht, dass es mit Architektur oder Compilern zu tun hat. Verwenden Sie die vollständige Bedingung beim Testen, wenn eine Zahl größer als Null ist. I.e. Verwenden Sie 'if (num> 0)' anstelle von 'if (num) '. Nicht sicher, ob das das Problem ist – smac89
* Ich sehe keine Aussage, die undefiniertes Verhalten auf verschiedenen compilers produzieren kann * - Aber Sie haben Aussagen, die Fließkommawerte ('pow()') produzieren, also ist Ihr Programm nicht garantiert die gleichen Ergebnisse zu erzielen. – PaulMcKenzie