/* package whatever; // don't place package name! */
import java.util.*;
import java.lang.*;
import java.io.*;
/** Answer to Stackoverflow question:
* https://stackoverflow.com/questions/64685241/why-does-col-variable-return-a-wrong-value
*/
class Ideone
{
public static long toColumnNumber
(String columnLabel
) { final int asciiOffset = (int) 'A' - 1; // 64 = 65 - 1, so that (int) 'B' - asciiOffset == 2
long columnNumber = 0;
for (int backwardsIndex=0; backwardsIndex < columnLabel.length(); backwardsIndex++) {
char letter = columnLabel.charAt(columnLabel.length() - backwardsIndex -1);
int letterAsNumber = (int) letter - asciiOffset;
columnNumber
+= Math.
pow(26, backwardsIndex
) * letterAsNumber
; }
return columnNumber;
}
{
System.
out.
println(A
+ " should be 1, is: " + toColumnNumber
(A
)); System.
out.
println(AA
+ " should be 27, is: " + toColumnNumber
(AA
)); System.
out.
println(ZZ
+ " should be 702, is: " + toColumnNumber
(ZZ
));
assert toColumnNumber("AUHS") == 31999L;
}
}
LyogcGFja2FnZSB3aGF0ZXZlcjsgLy8gZG9uJ3QgcGxhY2UgcGFja2FnZSBuYW1lISAqLwoKaW1wb3J0IGphdmEudXRpbC4qOwppbXBvcnQgamF2YS5sYW5nLio7CmltcG9ydCBqYXZhLmlvLio7CgovKiogQW5zd2VyIHRvIFN0YWNrb3ZlcmZsb3cgcXVlc3Rpb246CiAqIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzY0Njg1MjQxL3doeS1kb2VzLWNvbC12YXJpYWJsZS1yZXR1cm4tYS13cm9uZy12YWx1ZQogKi8KY2xhc3MgSWRlb25lCnsKCiAgICBwdWJsaWMgc3RhdGljIGxvbmcgdG9Db2x1bW5OdW1iZXIoU3RyaW5nIGNvbHVtbkxhYmVsKSB7CiAgICAgICAgZmluYWwgaW50IGFzY2lpT2Zmc2V0ID0gKGludCkgJ0EnIC0gMTsgLy8gNjQgPSA2NSAtIDEsIHNvIHRoYXQgKGludCkgJ0InIC0gYXNjaWlPZmZzZXQgPT0gMgogICAgICAgIGxvbmcgY29sdW1uTnVtYmVyID0gMDsKCiAgICAgICAgZm9yIChpbnQgYmFja3dhcmRzSW5kZXg9MDsgYmFja3dhcmRzSW5kZXggPCBjb2x1bW5MYWJlbC5sZW5ndGgoKTsgYmFja3dhcmRzSW5kZXgrKykgewogICAgICAgICAgICBjaGFyIGxldHRlciA9IGNvbHVtbkxhYmVsLmNoYXJBdChjb2x1bW5MYWJlbC5sZW5ndGgoKSAtIGJhY2t3YXJkc0luZGV4IC0xKTsKICAgICAgICAgICAgaW50IGxldHRlckFzTnVtYmVyID0gKGludCkgbGV0dGVyIC0gYXNjaWlPZmZzZXQ7CiAgICAgICAgICAgIGNvbHVtbk51bWJlciArPSBNYXRoLnBvdygyNiwgYmFja3dhcmRzSW5kZXgpICogbGV0dGVyQXNOdW1iZXI7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gY29sdW1uTnVtYmVyOwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluIChTdHJpbmdbXSBhcmdzKSB0aHJvd3MgamF2YS5sYW5nLkV4Y2VwdGlvbgogICAgewogICAgICAgIGZpbmFsIFN0cmluZyBBID0gIkEiOwogICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihBICsgIiBzaG91bGQgYmUgMSwgaXM6ICIgKyB0b0NvbHVtbk51bWJlcihBKSk7CiAgICAgICAgZmluYWwgU3RyaW5nIEFBID0gIkFBIjsKICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oQUEgKyAiIHNob3VsZCBiZSAyNywgaXM6ICIgKyB0b0NvbHVtbk51bWJlcihBQSkpOwogICAgICAgIGZpbmFsIFN0cmluZyBaWiA9ICJaWiI7CiAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKFpaICsgIiBzaG91bGQgYmUgNzAyLCBpczogIiArIHRvQ29sdW1uTnVtYmVyKFpaKSk7CgoKICAgICAgICBhc3NlcnQgdG9Db2x1bW5OdW1iZXIoIkFVSFMiKSA9PSAzMTk5OUw7CiAgICB9Cn0=