PDA

View Full Version : سوال: چرا خروجی این برنامه اشتباهه؟



hafez1
جمعه 22 اردیبهشت 1391, 15:44 عصر
برنامه ای که کداش پایین هست می یاد یه عدد از کاربر می گیره و اگه عدد صفر داشت صفر رو حذف می کنه و عدد جدید رو نشون می ده و اگه صفر نداشت همون عدد قبلی رو نشون می ده.
مثلا 103 میشه 13.
کداش به این صورته
#include<iostream>

using namespace std;

//using"^"

int main()
{
int number,num,tedadargham=0,r;

cout<<"please enter your number";

cin>>number;

num=number;

while(number!=0)
{
number=number/10;


tedadargham++;
}
تا اینجا می یام و تعداد رقم های عددرو به دست می یارم ولی اگه تا این جا رو جدا کامپایل کنیم تعداد رقم های عدد123456789123456789 رو 9 چاپ می کنه.چرا؟؟؟؟؟؟
ادامه کد به این صورته:

while(num!=0)
{
r=num/(10^(tedadargham-1));

num=num%10^(tedadargham-1);

tedadargham--;

if(r!=0)

cout<<r;
}
return 0;
}
اگه کل برنامه رو با هم کامپایل کنم مثلا عدد 103 رو بهش بدم عدد 12 رو بر می گردونه درصورتی که باید 13 بده.
کجاش اشتباس؟؟؟؟؟؟؟؟

shahmohammadi
جمعه 22 اردیبهشت 1391, 16:31 عصر
سلام.
int در محيط‌هاي چهار بايتي بزرگ‌ترين مقداري كه مي تونه بگيره 4294967295 هست كه 9 رقمي هست. وقتي شما اون عدد بزرگ رو بهش مي ديد قاطي مي‌كنه.

اگه كد رو در داخل بلوك سي‌پلاس‌پلاس بنويسيد، راحت‌تر مي تونيم بخونيم.
^ رو در سي نديدم، شايد اولويتشو رعايت نكردين:
num=num%(10^(tedadargham-1));
البته برنامه رو كامل بررسي نكردم، شايد ايراد از جاي ديگه‌اي باشه.

hafez1
جمعه 22 اردیبهشت 1391, 17:11 عصر
کاری که گفتید انجام دادم. بازم خروجی اشتباس.
اگه برای توان نخام از^ استفاده کنم باید چی کار کنم؟؟؟؟؟؟

vistacali
جمعه 22 اردیبهشت 1391, 20:24 عصر
دوست گرامی سوالتون رو درست بگید و بعد این کدتون هم بزارید داخل کدهای سی پلاس تا معلوم بشه چی نوشتید بعدا برای اعداد بزرگ از ارایه استفاده کنید چون حتی از long int هم استفاده کنی بازم 123456789987654321 نمی تونه بخوبه تا این عدد رو میخونه 21147483648 تا -21147483647

Ananas
جمعه 22 اردیبهشت 1391, 21:11 عصر
اگه برای توان نخام از^ استفاده کنم باید چی کار کنم؟؟؟؟؟؟
برای توان نباید از ^ استفاده کنی. از تابع pow تو فایل math.h استفاده کن.