Babbage's number with C++ not showing proper results
I was given a question to find babbage's number (A number whose square ends with 269696, for example 99736 squared is 9947269696, thus being a Babbage Number). My implementation in C++ is provided below. It is not providing the desired results. The first result is correct, but the subsequent ones are not. I probably think that it has to do with casting, or the variables getting out of range. But upon checking with the range of unsigned long long int
, I can't understand what is wrong with my code.
#include<iostream>
using namespace std;
int main(int argc, char **argv){
unsigned long long square = 0;
for(int i = 519; i < 100000; i++){
square = i*i;
if(square % 1000000 == 269696)
cout<<"Number: "<<i<<", Square: "<<square<<endl;
}
}
This is the output I'm getting :
Number: 25264, Square: 638269696
Number: 119328, Square: 1354269696
Number: 158816, Square: 18446744073162269696
Number: 186992, Square: 606269696
Number: 188008, Square: 987269696
Number: 331424, Square: 18446744071882269696
Number: 439080, Square: 18446744073227269696
I do see that the squares are also inaccurate, but I don't understand why.
Here's the list of Babbage's number
25264
99736
150264
224736
275264
349736
400264
474736
525264
599736
650264
724736
775264
849736
900264
974736
c++
add a comment |
I was given a question to find babbage's number (A number whose square ends with 269696, for example 99736 squared is 9947269696, thus being a Babbage Number). My implementation in C++ is provided below. It is not providing the desired results. The first result is correct, but the subsequent ones are not. I probably think that it has to do with casting, or the variables getting out of range. But upon checking with the range of unsigned long long int
, I can't understand what is wrong with my code.
#include<iostream>
using namespace std;
int main(int argc, char **argv){
unsigned long long square = 0;
for(int i = 519; i < 100000; i++){
square = i*i;
if(square % 1000000 == 269696)
cout<<"Number: "<<i<<", Square: "<<square<<endl;
}
}
This is the output I'm getting :
Number: 25264, Square: 638269696
Number: 119328, Square: 1354269696
Number: 158816, Square: 18446744073162269696
Number: 186992, Square: 606269696
Number: 188008, Square: 987269696
Number: 331424, Square: 18446744071882269696
Number: 439080, Square: 18446744073227269696
I do see that the squares are also inaccurate, but I don't understand why.
Here's the list of Babbage's number
25264
99736
150264
224736
275264
349736
400264
474736
525264
599736
650264
724736
775264
849736
900264
974736
c++
add a comment |
I was given a question to find babbage's number (A number whose square ends with 269696, for example 99736 squared is 9947269696, thus being a Babbage Number). My implementation in C++ is provided below. It is not providing the desired results. The first result is correct, but the subsequent ones are not. I probably think that it has to do with casting, or the variables getting out of range. But upon checking with the range of unsigned long long int
, I can't understand what is wrong with my code.
#include<iostream>
using namespace std;
int main(int argc, char **argv){
unsigned long long square = 0;
for(int i = 519; i < 100000; i++){
square = i*i;
if(square % 1000000 == 269696)
cout<<"Number: "<<i<<", Square: "<<square<<endl;
}
}
This is the output I'm getting :
Number: 25264, Square: 638269696
Number: 119328, Square: 1354269696
Number: 158816, Square: 18446744073162269696
Number: 186992, Square: 606269696
Number: 188008, Square: 987269696
Number: 331424, Square: 18446744071882269696
Number: 439080, Square: 18446744073227269696
I do see that the squares are also inaccurate, but I don't understand why.
Here's the list of Babbage's number
25264
99736
150264
224736
275264
349736
400264
474736
525264
599736
650264
724736
775264
849736
900264
974736
c++
I was given a question to find babbage's number (A number whose square ends with 269696, for example 99736 squared is 9947269696, thus being a Babbage Number). My implementation in C++ is provided below. It is not providing the desired results. The first result is correct, but the subsequent ones are not. I probably think that it has to do with casting, or the variables getting out of range. But upon checking with the range of unsigned long long int
, I can't understand what is wrong with my code.
#include<iostream>
using namespace std;
int main(int argc, char **argv){
unsigned long long square = 0;
for(int i = 519; i < 100000; i++){
square = i*i;
if(square % 1000000 == 269696)
cout<<"Number: "<<i<<", Square: "<<square<<endl;
}
}
This is the output I'm getting :
Number: 25264, Square: 638269696
Number: 119328, Square: 1354269696
Number: 158816, Square: 18446744073162269696
Number: 186992, Square: 606269696
Number: 188008, Square: 987269696
Number: 331424, Square: 18446744071882269696
Number: 439080, Square: 18446744073227269696
I do see that the squares are also inaccurate, but I don't understand why.
Here's the list of Babbage's number
25264
99736
150264
224736
275264
349736
400264
474736
525264
599736
650264
724736
775264
849736
900264
974736
c++
c++
asked Nov 21 '18 at 6:56
Anshul KumarAnshul Kumar
11
11
add a comment |
add a comment |
3 Answers
3
active
oldest
votes
The variable i
is a signed int
. Since e.g. 99736 * 99736
is much larger than even an unsigned int
can handle on all common platforms you will have arithmetic overflow by the multiplication, and for signed integer types that leads to undefined behavior.
You need to make i
an unsigned long long
as well.
add a comment |
You have to change the data type of variable i
from signed integer
to unsigned integer
. You are getting the wrong square of the number because of integer overflow
size_t square = 0;
for(size_t i = 519; i < 100000; i++){
square = i*i;
if(square % 1000000 == 269696)
cout<<"Number: "<<i<<", Square: "<< square <<"n";
}
As pointed by Some Programmer Dude in the comment, if you are working on 32-bit machine then you need to use unsigned long long
otherwise size_t
will perfectly on 64-bit machine.
2
Considering thatunsigned int
on all common platforms is 32 bits, and the second Babbage number is well above nine billions, that won't be enough.
– Some programmer dude
Nov 21 '18 at 7:09
add a comment |
Make Changes into the type of int i
variable unsigned long long i
.
As when you are calculating multiplication of int * int
for some ranges it's exceed the range of int may results into the undefined behaviour.
#include<iostream>
using namespace std;
int main(int argc, char **argv){
unsigned long long square = 0;
for(unsigned long long i = 519; i < 100000; i++){
square = i*i;
if(square % 1000000 == 269696)
cout<<"Number: "<<i<<", Square: "<<square<<endl;
}
}
add a comment |
Your Answer
StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53406733%2fbabbages-number-with-c-not-showing-proper-results%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
3 Answers
3
active
oldest
votes
3 Answers
3
active
oldest
votes
active
oldest
votes
active
oldest
votes
The variable i
is a signed int
. Since e.g. 99736 * 99736
is much larger than even an unsigned int
can handle on all common platforms you will have arithmetic overflow by the multiplication, and for signed integer types that leads to undefined behavior.
You need to make i
an unsigned long long
as well.
add a comment |
The variable i
is a signed int
. Since e.g. 99736 * 99736
is much larger than even an unsigned int
can handle on all common platforms you will have arithmetic overflow by the multiplication, and for signed integer types that leads to undefined behavior.
You need to make i
an unsigned long long
as well.
add a comment |
The variable i
is a signed int
. Since e.g. 99736 * 99736
is much larger than even an unsigned int
can handle on all common platforms you will have arithmetic overflow by the multiplication, and for signed integer types that leads to undefined behavior.
You need to make i
an unsigned long long
as well.
The variable i
is a signed int
. Since e.g. 99736 * 99736
is much larger than even an unsigned int
can handle on all common platforms you will have arithmetic overflow by the multiplication, and for signed integer types that leads to undefined behavior.
You need to make i
an unsigned long long
as well.
answered Nov 21 '18 at 7:02
Some programmer dudeSome programmer dude
303k25265426
303k25265426
add a comment |
add a comment |
You have to change the data type of variable i
from signed integer
to unsigned integer
. You are getting the wrong square of the number because of integer overflow
size_t square = 0;
for(size_t i = 519; i < 100000; i++){
square = i*i;
if(square % 1000000 == 269696)
cout<<"Number: "<<i<<", Square: "<< square <<"n";
}
As pointed by Some Programmer Dude in the comment, if you are working on 32-bit machine then you need to use unsigned long long
otherwise size_t
will perfectly on 64-bit machine.
2
Considering thatunsigned int
on all common platforms is 32 bits, and the second Babbage number is well above nine billions, that won't be enough.
– Some programmer dude
Nov 21 '18 at 7:09
add a comment |
You have to change the data type of variable i
from signed integer
to unsigned integer
. You are getting the wrong square of the number because of integer overflow
size_t square = 0;
for(size_t i = 519; i < 100000; i++){
square = i*i;
if(square % 1000000 == 269696)
cout<<"Number: "<<i<<", Square: "<< square <<"n";
}
As pointed by Some Programmer Dude in the comment, if you are working on 32-bit machine then you need to use unsigned long long
otherwise size_t
will perfectly on 64-bit machine.
2
Considering thatunsigned int
on all common platforms is 32 bits, and the second Babbage number is well above nine billions, that won't be enough.
– Some programmer dude
Nov 21 '18 at 7:09
add a comment |
You have to change the data type of variable i
from signed integer
to unsigned integer
. You are getting the wrong square of the number because of integer overflow
size_t square = 0;
for(size_t i = 519; i < 100000; i++){
square = i*i;
if(square % 1000000 == 269696)
cout<<"Number: "<<i<<", Square: "<< square <<"n";
}
As pointed by Some Programmer Dude in the comment, if you are working on 32-bit machine then you need to use unsigned long long
otherwise size_t
will perfectly on 64-bit machine.
You have to change the data type of variable i
from signed integer
to unsigned integer
. You are getting the wrong square of the number because of integer overflow
size_t square = 0;
for(size_t i = 519; i < 100000; i++){
square = i*i;
if(square % 1000000 == 269696)
cout<<"Number: "<<i<<", Square: "<< square <<"n";
}
As pointed by Some Programmer Dude in the comment, if you are working on 32-bit machine then you need to use unsigned long long
otherwise size_t
will perfectly on 64-bit machine.
edited Nov 21 '18 at 7:35
answered Nov 21 '18 at 7:04
Shravan40Shravan40
4,37031632
4,37031632
2
Considering thatunsigned int
on all common platforms is 32 bits, and the second Babbage number is well above nine billions, that won't be enough.
– Some programmer dude
Nov 21 '18 at 7:09
add a comment |
2
Considering thatunsigned int
on all common platforms is 32 bits, and the second Babbage number is well above nine billions, that won't be enough.
– Some programmer dude
Nov 21 '18 at 7:09
2
2
Considering that
unsigned int
on all common platforms is 32 bits, and the second Babbage number is well above nine billions, that won't be enough.– Some programmer dude
Nov 21 '18 at 7:09
Considering that
unsigned int
on all common platforms is 32 bits, and the second Babbage number is well above nine billions, that won't be enough.– Some programmer dude
Nov 21 '18 at 7:09
add a comment |
Make Changes into the type of int i
variable unsigned long long i
.
As when you are calculating multiplication of int * int
for some ranges it's exceed the range of int may results into the undefined behaviour.
#include<iostream>
using namespace std;
int main(int argc, char **argv){
unsigned long long square = 0;
for(unsigned long long i = 519; i < 100000; i++){
square = i*i;
if(square % 1000000 == 269696)
cout<<"Number: "<<i<<", Square: "<<square<<endl;
}
}
add a comment |
Make Changes into the type of int i
variable unsigned long long i
.
As when you are calculating multiplication of int * int
for some ranges it's exceed the range of int may results into the undefined behaviour.
#include<iostream>
using namespace std;
int main(int argc, char **argv){
unsigned long long square = 0;
for(unsigned long long i = 519; i < 100000; i++){
square = i*i;
if(square % 1000000 == 269696)
cout<<"Number: "<<i<<", Square: "<<square<<endl;
}
}
add a comment |
Make Changes into the type of int i
variable unsigned long long i
.
As when you are calculating multiplication of int * int
for some ranges it's exceed the range of int may results into the undefined behaviour.
#include<iostream>
using namespace std;
int main(int argc, char **argv){
unsigned long long square = 0;
for(unsigned long long i = 519; i < 100000; i++){
square = i*i;
if(square % 1000000 == 269696)
cout<<"Number: "<<i<<", Square: "<<square<<endl;
}
}
Make Changes into the type of int i
variable unsigned long long i
.
As when you are calculating multiplication of int * int
for some ranges it's exceed the range of int may results into the undefined behaviour.
#include<iostream>
using namespace std;
int main(int argc, char **argv){
unsigned long long square = 0;
for(unsigned long long i = 519; i < 100000; i++){
square = i*i;
if(square % 1000000 == 269696)
cout<<"Number: "<<i<<", Square: "<<square<<endl;
}
}
#include<iostream>
using namespace std;
int main(int argc, char **argv){
unsigned long long square = 0;
for(unsigned long long i = 519; i < 100000; i++){
square = i*i;
if(square % 1000000 == 269696)
cout<<"Number: "<<i<<", Square: "<<square<<endl;
}
}
#include<iostream>
using namespace std;
int main(int argc, char **argv){
unsigned long long square = 0;
for(unsigned long long i = 519; i < 100000; i++){
square = i*i;
if(square % 1000000 == 269696)
cout<<"Number: "<<i<<", Square: "<<square<<endl;
}
}
edited Nov 23 '18 at 6:32
answered Nov 21 '18 at 7:05
Mr. RoshanMr. Roshan
1,393524
1,393524
add a comment |
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53406733%2fbabbages-number-with-c-not-showing-proper-results%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown