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 6 Years Ago by mimis: n/a

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 6 Years Ago by tesuji: n/a

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

Edited 6 Years Ago by tesuji: n/a

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 6 Years Ago by mimis: n/a

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.

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 6 Years Ago by Software guy: n/a

Comments
Nope
This article has been dead for over six months. Start a new discussion instead.