Chào mọi người, em đang làm một chương trình về bignum, em có đặt vòng lặp do whlie để nó chạy nhiều lần. Tuy nhiên có vẻ nó đã có vấn đề.
Ở vòng thứ 2 trở đi, bignum a mặc định là 0. Nếu vứt dòng cin >> n thì nó chạy bình thường.
Mọi người giúp em làm sao giữ lại cin >>n mà nó vẫn cho nhập a với ạ.
Mã:
// Bai tap BigNum.cpp : Defines the entry point for the console application.
#include "stdafx.h"
#include <iostream>
#include <conio.h>
using namespace std;
//Khai báo hằng
#define MAXDIGITS 100 //Độ dài của số
#define PLUS 1 //số dương
#define MINUS -1 // số âm
//Khai báo cấu trúc
typedef struct {
char digits[MAXDIGITS]; //bignum
int signbit; //dấu của bignum
int lastdigit; //số chữ số
}bignum;
//Khai báo hàm
void scan_bignum(bignum &n); //Nhập số nguyên lớn
void print_bignum(bignum n);//in số
int kiemtra(char s[]); //kiểm tra chuỗi có phải số nguyên lớn không
int compare_bignum(bignum a, bignum b);
int main()
{
do {
int n;
bignum a, b, c;
cout << "Nhap a: ";
scan_bignum(a);
print_bignum(a);
cout << "
";
cout << "Nhap n: ";
cin >> n;
cout << "
";
cout << "Nhan phim ESC de thoat...
";
} while (_getch() != 27);
return 0;
}
void scan_bignum(bignum &n) //Nhập số nguyên lớn
{
//B1: Nhập một chuỗi bất kỳ
char temp[MAXDIGITS + 2];
cin.getline(temp, MAXDIGITS + 2);
//B2: Kiểm tra chuỗi có hợp lệ hay không
//B2.1: Nếu không hợp lệ thì gán bignum n = 0
if (!kiemtra(temp))
{
n.signbit = PLUS;
n.lastdigit = 0;
n.digits[0] = 0;
}
//B2.2: Nếu hợp lệ thì chuyển thành bignum
else {
int len = strlen(temp);
if (temp[0] != '-') //Nếu là số dương
{
int len = strlen(temp);
n.signbit = PLUS;
n.lastdigit = len - 1;
for (int i = 0; i <= n.lastdigit; i++)
n.digits[i] = temp[len - 1 - i] - 48;
}
else {//số âm
n.signbit = MINUS;
n.lastdigit = len - 2;
for (int i = 0; i <= n.lastdigit; i++)
n.digits[i] = temp[len - 1 - i] - 48;
}
}
}
void print_bignum(bignum n)//in số
{
if (n.signbit == MINUS) cout << "-"; //số âm
for (int i = n.lastdigit; i >= 0; i--) //chạy ngược
cout << (int)n.digits[i]; //in từng chữ số
}
int kiemtra(char s[]) //kiểm tra chuỗi có phải số nguyên lớn không
{
int len = strlen(s);
//ktra ký tự đầu
if ((s[0] != '-' && !isdigit(s[0])) || (s[0] == '-' && len == 1))
return 0;
//ktra các ký tự tiếp theo
for (int i = 1; i<len; i++)
if (!isdigit(s[i])) return 0;
//không phát hiện vi phạm
return 1;
}
View more random threads:
Thông qua phân tích dữ liệu Google từ 86 quốc gia, mới đây, một công ty tại Anh đã công bố bảng xếp hạng kích tấc "cậu nhỏ" của các nước trên thế giới. Kết quả, hầu hết các nước xếp ở nhóm đầu của...
"Chim" của chàng trai Việt thuộc...