0

Hi,
I am trying to write a program that will read an integer as a string and it will add 1 to this integer. For example if it read 234, it will return 235.

My attempt is this:

#include <fstream>
#include <string>
using namespace std;

void addone(string& num){
	int n=num.size();
	int i=n-1;
	
	while(num[i]=='9'){
		if (i==0){
			num[i]=1;
			for (int j=1;j<=n;j++){
				num[j]='0';
			}
		}
		
		num[i]='0';
		i--;
	}
	if (i>=0){
		num[i]=num[i]+1;
	}
}
		

int main()
{
	ifstream in("something.in");
	ofstream out("something.out");
	
	string num;
	in >> num;
	
	addone(num);
	
	out << num;
	
	return 0;
}

This code works good generally.
The only problem is that if the number has only 9s it outputs only 0s without 1.

Can you help me to fix this problem?

Edited by mimis: n/a

5
Contributors
9
Replies
10
Views
7 Years
Discussion Span
Last Post by iamthwee
0

hi mimis

num[i]=1;

// maybe if you replace this by

num[i]=0x31; //ascii coding for numeric 1 is hex 31 (third column, first row) or simpler num[i]='1';
 
// it will work

(didn't check rest of your code)

-- tesu

Edited by tesuji: n/a

0

Well, there might also be some ordinary mortals who GOT to do there profane programming homework when studying first-year computer sciences.

Edited by tesuji: n/a

0

Thank you for your answers.

My second attemp was that:

#include <fstream>
#include <cstring>
#include <stdlib.h>
#include <string>
using namespace std;

int main()
{
	ifstream in("something.in");
	ofstream out("something.out");
	
	string num;
	stringstream ss;
	in >> num;
	
	int i,temp;
	
	temp= atoi(num.c_str()); 
	temp++;
	ss << temp;
	num=ss.str();
	
	
	out <<num;
	
	return 0;
}

But the compiler appear that error:
runaround.cpp:12: error: aggregate ‘std::stringstream ss’ has incomplete type and cannot be defined

I tried to do it with itoa but the compiler appear that itoa is not declered in this scope.

Edited by mimis: n/a

0

I have to include <sstream> header file. And you don't need atoi() because stringstream is a safer way to convert the string to an int.

-1

Hi,
I looked at the task and found it interesting... So i did the code, you can get the algorithm for "9". Hope this helps

#include <iostream>
#include <string>
using namespace std;

int main()
{
	while(1){
	char c[2];
	int i=0, factor=0,max=0;
         int sub;
	string  a; 

	cout<<"\nEnter the integer:";
	cin>>a;
    
	sub= a.size();

	c[1] = a[sub-1];
         c[0] = a[0];
	max = a.size();
	cout<<"Last Integer Found:"<<c[1]<<"\n";
       

	if (c[0]=='9' && c[1] =='9')//if the first and last element is 9
	{
	     cout<<"\n1";

		 for(i=0;i<=a.size()-1;i++)
		 {
			 cout<<"0";
	          }
	}
	
       else if(c[1]== '9')//if the last element is 9
       {
	  
                 for(i=a.size()-1;i>-1;i--)
	     {
                    if(a[i] == c[1])
	    	{
			
			factor=i;
			
		       if(factor<max)
			      {max = factor;}



		 }
	   
		else if(a[i]!=c[1])
		{/*Do Nothing*/}

		 
	     }
	  
	   cout<<"\nLargest 9 found was element:"<<max<<"\n";

	   cout<<"Calculating using Finding NINE Method.....";

	   a[max-1] = (int)a[max-1] + 1;

	   i = 0;
  
	   for(i=max;i<=a.size();i++)
	   {
		   a[i]= '0';
	   }



	   cout<<"\nNew value is :"<<a<<"\n";
}

	else if(c[1]!='9')//if the last element is not 9
	{
		cout<<"9 Not detected Performing Normal Procedure\n";
	
		sub  = 0;

	    sub = (int)c[1];

	    sub = sub + 1;
       
        a[a.size()-1] = (char) sub; 
      
		cout<<"The new Integer is:"<<a<<"\n";

	}
   
}
	return 0;

}

Compiled it using VC++ 2008 and works perfectly.

Edited by Software guy: n/a

Votes + Comments
Nope
This topic has been dead for over six months. Start a new discussion instead.
Have something to contribute to this discussion? Please be thoughtful, detailed and courteous, and be sure to adhere to our posting rules.